[plt-scheme] Lazy evaluation and tail calls
On Feb 9, 2009, at 4:38 AM, James Coglan wrote:
>
>
> 2009/2/9 Matthias Felleisen <matthias at ccs.neu.edu>
>
> On Feb 8, 2009, at 7:53 PM, James Coglan wrote:
>
>> I've since moved onto implementing continuations, and I had
>> enough trouble getting my head around the applicative order
>> version that I think trying to implement continuations for normal
>> order would make my head explode...
>
> James, just for the record from a semanticist: the terms
> 'applicative order' and 'normal order' make NO SENSE whatsoever in
> the world of PLs. Period. -- Matthias
>
>
> Could you elaborate? These are terms I picked up learning Scheme
> from SICP but have also seen any number of confusing descriptions
> of various calling semantics.
Normal order and applicative order are failed attempts to explain the
nature of call-by-name programming languages and call-by-value
programming languages as models of the lambda calculus. Each
describes a so-called _reduction strategy_, which is an algorithm
that picks the position of next redex BETA that should be reduced. By
1972, it was clear that instead you want different kind of calculi
for different calling conventions and evaluation strategies (to the
first outermost lambda, not inside). That is, you always reduce at
the leftmost-outermost point in a program but you use either BETA-
NAME or BETA-VALUE. Non-PL people were confused (and still are)
because BETA-NAME looks like BETA but nearly 40 years later, everyone
should figure this out. SICP was written when the majority of people
were still confused. -- Matthias
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20090209/e0735b0c/attachment.html>