About 30 years ago, Scheme had FILTER and MAP courtesy of Lisp hackers
who missed them from their past experience. To this collection,
Scheme added a lexically-scoped, properly-functioning LAMBDA. But,
despite of the PR value of anything with Guy Steele's name associated
with it, we think these features should be cut from PLT Scheme v300.
We think dropping FILTER and MAP is pretty uncontroversial; (filter P
S) is almost always written clearer as a DO loop (plus the LAMBDA is
slower than the loop). Even more so for (map F S). In all cases,
writing the equivalent imperative program is clearly beneficial.
Why drop LAMBDA? Most Scheme users are unfamiliar with Alonzo Church
(indeed, they don't even know that he was related to Guy Steele), so
the name is confusing; also, there is a widespread misunderstanding
that LAMBDA can do things that a nested function can't -- we still
recall Dan Friedman's Aha! after we showed him that there was no
difference! (However, he appears to have since lapsed in his ways.)
Even with a better name, we think having the two choices side-by-side
just requires programmers to think about their program; not having the
choice streamlines the thought process, and Scheme is designed from
the ground up to, as much as possible, keep programmers from thinking
So now FOLD. This is actually the one we've always hated most,
because, apart from a few examples involving + or *, almost every time
we see a FOLD call with a non-trivial function argument, we have to
grab pen and paper and imagine the *result* of a function flowing back
in as the *argument* to a function. Plus, there are *more* arguments
coming in on the side! This is all absurdly complicated. Because
almost all the examples of FOLD we found in practice could be written
as a simple loop with an accumulator, this style should be preferred,
perhaps with us providing a simple helper function to abstract away
the boilerplate code. At any rate, FOLD must fold.
--The PLT Scheme Team
> The Fate Of LAMBDA in PLT Scheme v300
> Lambda the Ultimate Design Flaw
Lambda the ultimate April 1 present.
> Shriram Krishnamurthi writes:
>> The Fate Of LAMBDA in PLT Scheme v300
>> Lambda the Ultimate Design Flaw
> Lambda the ultimate April 1 present.
You misunderstand this backwards. They are not giving lambda. They are
taking lambda away.
Not to worry. Just put a lambda back in with something like the
((foo vars body ...)
(define (f . vars)
Don't tell the PLT group, or they may remove macros, or internal
defines, or at least the short-hand for procedure definitions.
I like the idea of dropping LAMBDA. In fact, why don't we drop much,
much more, reducing the language to just two built-in functions? How
about calling these special functions "combinators" and naming them,
in honor of the author of the above proposal, S(hriram) and
We agree that dropping FILTER and MAP is a good idea, although for
different reasons. We think that (filter P S) is almost always
written more clearly as:
((lambda (x) (f (x x)))
(lambda (x) (f (lambda (y) ((x x) y))))))
(if (null? r) '()
(if (p (car r))
(cons (car r) (f (cdr r)))
(f (cdr r))))))) s)
So, we are announcing that we will be forking the PLT Scheme codebase,
into a new project, tentatively named "Lorenzo's Oil." Version 1 will
remove MAP, etc. We expect Version 2 to further cleanse the
language. We are embarrassed, for example, that we left in the IF
-- The Lorenzo's Oil Team
I don't languages that don't allow me to build levels of abstraction.
Unlambda would be a lot less annoying if it had define and variables.
Simply great. Now I'll never have to learn Python, I can just
write Python code (without that stupid whitespace thing) in Scheme :)
> Simply great. Now I'll never have to learn Python, I can just write
> Python code (without that stupid whitespace thing) in Scheme :)
If you can't join them - beat them!
Jens Axel Søgaard