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.