<html>

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:Arial;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
p.MsoAutoSig, li.MsoAutoSig, div.MsoAutoSig
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.Typed
        {font-family:"Courier New";}
span.tty
        {font-family:"Courier New";}
span.Name
        {font-style:italic;}
span.Variable
        {font-family:"Times New Roman";
        font-style:italic;}
span.EmailStyle21
        {font-family:Arial;
        color:windowtext;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>James Hague in “A deeper look at tail recursion in
Erlang” (<a href="http://prog21.dadgum.com/1.html">http://prog21.dadgum.com/1.html</a>)
makes an interesting point about optimizing tail recursion by keeping parameters
in the same order.  This, I think, answers a question I have had in my
mind about ordering parameters in functions in a module: is it better to put
the main object at the beginning of the parameter list or the end?</p>

<p class=MsoNormal> </p>

<p class=MsoNormal>For example, suppose we have a module “widget”
that implements some sort of widget––whatever that
is––with a couple of member functions that act on a widget, say “change”
and “query”.  Is it better to implement these functions with
the widget object being the first parameter or the last?  That is, which
is better:</p>

<p class=MsoNormal> </p>

<p class=MsoNormal style='margin-left:.5in'><span style='font-family:Consolas'>change(Widget,
Arg1, Arg2) -> …</span></p>

<p class=MsoNormal style='margin-left:.5in'><span style='font-family:Consolas'>query(Widget,
Arg1) -> …</span></p>

<p class=MsoNormal> </p>

<p class=MsoNormal>or:</p>

<p class=MsoNormal> </p>

<p class=MsoNormal style='margin-left:.5in'><span style='font-family:Consolas'>change(Arg1,
Arg2, Widget) -> …</span></p>

<p class=MsoNormal style='margin-left:.5in'><span style='font-family:Consolas'>query(Arg1,
Widget) -> …</span></p>

<p class=MsoNormal> </p>

<p class=MsoNormal>Based on Hague’s insight, I would say the former, with
the object up front, is better.  Why?  Because functions that are
used by these functions (and functions that use them) are likely to copy the
pattern (in fact, they should), and the Widget argument can therefore fall
through in the same position.  For example, if change/3 has to call a
couple of private functions in the module in order to perform the “change,”
it is likely these functions will have different arity.  If we are in the
habit of putting the object at the end of the parameter list, then its position
will have changed.  If, on the other hand, the object is at the beginning
of the parameter list, it will always be in the same position and will cause
less stack manipulation.  Granted, this optimization only occurs in the
case of tail calls, but surely this is a good habit to be in for that case when
the tail call optimization can be used.</p>

<p class=MsoNormal> </p>

<p class=MsoNormal>Discuss.</p>

<p class=MsoNormal> </p>

<p class=MsoNormal>Cheers,</p>

<p class=MsoNormal> </p>

<p class=MsoNormal>David</p>

</div>

</body>

</html>