<div dir="ltr"><div>Thank you for the illuminating primer, Matt. I hadn'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"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></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>
> On Wed, Aug 28, 2013 at 11:04 PM, Matthias Felleisen<br>
> <<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>> wrote:<br>
>> For the record, there is no such thing as 'applicative order.' There is call-by-value and there is a humongous misunderstanding<br>
>> called 'applicative order'<br>
><br>
> When authors use this term what do they cite as being the<br>
> 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'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 'applicative' 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's criteria scale to call-by-reference/pass-by-worth, call-by-copy-in/out, etc. So Plotkin'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>