Page:AIM-353.djvu/32



{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:

where 21 e.g. selects the first element of a pair. (Note that these functions are isomorphic to,  , and  !)  {Closures} Most modern LISP systems, such as MacLISP [Moon 74] and InterLISP [Teitelman 74], scope variables dynamically. They often provide a special feature (the  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 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  or , then this does not work because of the so-called environment problem. However, a compiler can choose the variables  and   to be different from all other variable names.