<div dir="ltr"><div>Thank you for the illuminating primer, Matt. I hadn&#39;t realized that it was such a questionable term.<br><br></div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Aug 28, 2013 at 12:54 PM, Matthias Felleisen <span dir="ltr">&lt;<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On Aug 28, 2013, at 12:33 PM, Grant Rettke wrote:<br>
<br>
&gt; On Wed, Aug 28, 2013 at 11:04 PM, Matthias Felleisen<br>
&gt; &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:<br>
&gt;&gt; For the record, there is no such thing as &#39;applicative order.&#39; There is call-by-value and there is a humongous misunderstanding<br>
&gt;&gt; called &#39;applicative order&#39;<br>
&gt;<br>
&gt; When authors use this term what do they cite as being the<br>
&gt; authoritative source? How did people come up with using the term?<br>
<br>
<br>
</div>A short history of PL and LC and evaluation order:<br>
<br>
* 1960ish: people discover the lc as a model of pl. But the lc by itself is not a pl, and they know that. For example, you can encode arithmetic in lc but that&#39;s bad. They also understand that lc per se does not nail down an evaluation function. For pragmatic reasons, it is clearly wrong to define<br>

<br>
 eval[[ e ]] = the normal form of e according to beta<br>
<br>
Otherwise you get infinite loops when the programs that you<br>
<br>
* over the he following decade: people make two different compromises:<br>
<br>
 [1] they stop evaluating when they find a lambda but otherwise use beta<br>
<br>
 [2] they evaluate the argument before they evaluate a function application<br>
        Algol 60 introduces the by-value variant as<br>
        A(int x) value x; as short for A(int x); x := x;<br>
        with the understanding that := is strict on the rhs.<br>
<br>
* in parallel: mathematicians think that this is about a strategy for evaluation lambda terms and explore a whole range of evaluation strategy. An ES is a function from a lambda term with at least one beta redex to a specific beta redex. Applicative order is one of these.<br>

<br>
* 1970ish: People begin to understand that &#39;applicative&#39; does not address the termination issue. Confusion reigns.<br>
<br>
* 1973: Plotkin writes the definitive paper on the issue of relating LC to notions of CBName and CBValue. It appears in TCS:<br>
<br>
        Call-by-name, call-by-value, and the lambda calculus.<br>
<br>
It shows how the idea of evaluation order and the idea of a calculus relate to each other and sets out general criteria. Then it shows that two different calculi relate to the specified evaluation function according to these criteria.<br>

<br>
* I later showed in my dissertation that these criteria also apply to extensions of the model with assignment and control.<br>
<br>
* Crank and I followed up with a paper that shows how Plotkin&#39;s criteria scale to call-by-reference/pass-by-worth, call-by-copy-in/out, etc. So Plotkin&#39;s criteria are neither whimsical nor a fluke. It is possible to work out this connection for any combination.<br>

<br>
* In a nutshell, however, the idea of evaluation strategy for LC relates to the idea of evaluation order in PLs only in a highly superficial manner.<br>
<br>
* Sadly SICP continues to propagate this misunderstanding and people keep for falling for it because the book is intriguing in other ways.<br>
<br>
So if you wish to connect LC and PL and speak about order, please study the above citations. The whole discussion is summarized in the first part of the REDEX book (see <a href="http://redex.racket-lang.org" target="_blank">redex.racket-lang.org</a>).<br>

<span class="HOEnZb"><font color="#888888"><br>
-- Matthias<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>