# Page:AIM-353.djvu/32

 Steele and Sussman March 10, 1976 30 LAMBDA: The Ultimate Imperative

## Notes

{Alonzowins}
The lambda calculus was originally developed by Alonzo Church as a formal axiomatic system of logic. [Church 41] Happily, it may be re-interpreted in several interesting ways as a model for computation.

{Callbyneed}
The term "call-by-need" is due to Wadsworth. [Wadsworth 71] This technique is similar to the "delay rule" of Vuillemin. [Vuillemin 74]

{Churchwins}
Reynolds uses the term "continuation" in [Reynolds 72]. Church clearly understood the use of continuations; it is the only way to get anything accomplished at all in pure lambda calculus! For example, examine his definition of ordered pairs and triads on page 30 of [Church 41]. In SCHEME notation, this is:

 [M, N] means ```(LAMBDA (A) (A M N)) ``` 21 means ```(LAMBDA (A) (A (LAMBDA (B C) B))) ``` 22 means ```(LAMBDA (A) (A (LAMBDA (B C) C))) ```

where 21 e.g. selects the first element of a pair. (Note that these functions are isomorphic to `CONS`, `CAR`, and `CDR`!)

{Closures}
Most modern LISP systems, such as MacLISP [Moon 74] and InterLISP [Teitelman 74], scope variables dynamically. They often provide a special feature (the `FUNARG` device) for lexical scoping, but in most implementations this feature is not completely general.

{Consgenerators}
This example is from [Friedman 75]. Landin uses a similar technique to describe streams in [Landin 65]. Henderson and Morris [Henderson 76] present several examples in this vein, including an elegant solution to the samefringe problem of Hewitt [Hewitt 74] [Smith 75].

{Cplstuff}
CPL is described in [Barron 63] and [Buxton 66]. BCPL is a simplified version of CPL intended for systems programming. [Richards 69] [Richards 74] Also related to CPL is the language C, in which UNIX is written.

{Envproblem}
If the variable to be set is `VAR` or `VAL`, then this does not work because of the so-called environment problem. However, a compiler can choose the variables `VAR` and `VAL` to be different from all other variable names.