upcoming change in PLT Scheme v300

2 views
Skip to first unread message

Shriram Krishnamurthi

unread,
Apr 1, 2005, 8:03:48 AM4/1/05
to
The Fate Of LAMBDA in PLT Scheme v300
or
Lambda the Ultimate Design Flaw

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
at all.

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

israel

unread,
Apr 1, 2005, 8:35:24 AM4/1/05
to
Shriram Krishnamurthi <s...@cs.brown.edu> writes:

> The Fate Of LAMBDA in PLT Scheme v300
> or
> Lambda the Ultimate Design Flaw

Marvellous.

Lambda the ultimate April 1 present.

Jussi Piitulainen

unread,
Apr 1, 2005, 9:31:56 AM4/1/05
to
israel writes:

> Shriram Krishnamurthi writes:
>
>> The Fate Of LAMBDA in PLT Scheme v300
>> or
>> Lambda the Ultimate Design Flaw
>
> Marvellous.
>
> 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
following:

(define-syntax foo
(syntax-rules ()
((foo vars body ...)
(let ()
(define (f . vars)
body ...)
f))))

Don't tell the PLT group, or they may remove macros, or internal
defines, or at least the short-hand for procedure definitions.

Matthias Blume

unread,
Apr 1, 2005, 11:28:02 AM4/1/05
to
Shriram Krishnamurthi <s...@cs.brown.edu> writes:

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
K(rishnamurthi)?

Matthias

will.fi...@gmail.com

unread,
Apr 1, 2005, 11:29:12 AM4/1/05
to
A group of us are pretty upset that the PLT Scheme Team has announced
plans to drop LAMBDA from PLT Scheme v300.

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 (f)
((lambda (x) (f (x x)))
(lambda (x) (f (lambda (y) ((x x) y))))))
(lambda (f)
(lambda (r)
(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
statements.

-- The Lorenzo's Oil Team

Sunnan

unread,
Apr 1, 2005, 1:49:43 PM4/1/05
to
Matthias Blume wrote:
> 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
> K(rishnamurthi)?

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.

Jonathan Tang

unread,
Apr 1, 2005, 2:14:46 PM4/1/05
to
Where's the SourceForge project page? I want to contribute!

Ulrich Hobelmann

unread,
Apr 1, 2005, 5:05:22 PM4/1/05
to
Shriram Krishnamurthi wrote:
> The Fate Of LAMBDA in PLT Scheme v300
> or
> Lambda the Ultimate Design Flaw

Simply great. Now I'll never have to learn Python, I can just
write Python code (without that stupid whitespace thing) in Scheme :)

Jens Axel Søgaard

unread,
Apr 1, 2005, 5:33:22 PM4/1/05
to
Ulrich Hobelmann wrote:

> 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!

<http://plt-spy.sourceforge.net/home.html>

--
Jens Axel Søgaard

Alfonso G. Urroz

unread,
Apr 1, 2005, 7:32:34 PM4/1/05
to
Jens Axel S?gaard <use...@soegaard.net> wrote:
Nice April's fool day guys.


> Ulrich Hobelmann wrote:

> <http://plt-spy.sourceforge.net/home.html>

> --
> Jens Axel S?gaard

Reply all
Reply to author
Forward
0 new messages