[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Limitation with lambda
In article <15590@agate.BERKELEY.EDU>, 128a-3aj@e260-3b (Jonathan Dubman) writes:
>
>There seems to be a gross omission in the lambda primitive. It seems like
>there is no way to create a recursive function on the fly! I'm reading
>the Abelson and Sussman book but they seem to avoid this issue.
This problem actually has quite an interesting history. From the Lisp
1.5 Programmer's Manual (J. McCarthy et al, 1963), p. 8:
"The lambda notation alone is inadequate for naming recursive
functions. Not only must the variables be bound, but the name of
the function must be bound, since it is used inside an expresion
to stand for the entire expression. ... In order to be able to
write expressions that bear their own name, we introduce the LABEL
notation."
LABEL only defines a single function in terms of itself. Scheme's
LETREC and Common Lisp's LABELS extend this to allow mutually
recursive function definitions.
I don't know if it was known in 1963, but LABEL or its equivalent is
not actually necessary in order to define recursive functions. The
trick is to use the Y combinator. In practice, though, this method
would be fairly inefficient.
--
Joe Weening Computer Science Dept.
weening@Gang-of-Four.Stanford.EDU Stanford University
- References:
- Limitation with lambda
- From: apple!bionet!agate!e260-3b.berkeley.edu!128a-3aj@bloom-beacon.mit.edu (Jonathan Dubman)