Lambda-Calculus

Francois-Rene Rideau fare@tunes.org
Fri, 16 Oct 1998 20:04:12 +0200


>>: Brian Rice
>: Tril

>> that abstraction is seen as one-dimensional
There are lots of variants of lambda-calculi,
some of them have builtin support for multiple arguments
(most notably those built over message-passing calculi).
The LISP family of languages has such support.
The ML family of languages has first-class tuples and pattern matching instead.
Moreover, I invite you to learn the concept of (un)curryfication.

All in all, the fact that theorists study one-argument lambda-abstraction
is for the sake of simplicity: lambda-calculus is among the simplest
Turing-equivalent calculi, and having multiple arguments only makes it
more complicated without bringing any added expressiveness.
When you're trying to have the whole formal semantics of a calculus on one page
(as opposed to thousands of pages of informal semantics as for some other
languages), it helps to not unnecessarily make it complex.
Again, see curryfication.

> Thinking in lambda calculus is not natural.
Is thinking natural at all?
Rational Thinking is an effort, it's not natural;
but it's the victory of education and civilization
over raw instincts and wild life.
As far as lambda-calculus goes, it appears naturally
in many completely different settings, and has withstood the test of time,
its interest having been confirmed rather than infirmed by 68 years of
computer science research.

It appears as basic in proof theory,
where beta reduction models cut elimination;
it appears naturally in the theory of binding and scoping of variables;
it appears naturally when axiomatizing the notion of function:
\x.E ($\lambda x.E$) is but another way to write x |-> E ($x \mapsto E$);
it appears naturally as a generalization of the essence of recursion theory;
it appears naturally when trying to build a minimal reflective language (LISP).

Many current languages are consciously built (not exclusively) upon
lambda calculus: CommonLISP, Scheme, Dylan, SML, OCaml, Haskell, Clean.
Even Java 1.1 was enriched specifically to allow (clumsily) for
lambda-abstractions (see inner classes and their use in standard libraries).
I invite you all to learn and use at least one of these languages,
and come back afterwards with a better idea of what's good and what's bad
about them (and my opinion is that there *are* things that are bad or lack
in these languages, but lambda-calculus is part of what's good about them).

I don't think I'm "sold" to lambda-calculus (as I've read in another message
in this list). Perhaps there are simpler concepts that subsume
lambda-calculus and give better insight into programming languages;
if there are, I'll be glad to learn about them. I haven't seen them yet,
and lambda-calculus is so simple that I'd be surprised if/when I meet them.
I certainly do not mean that lambda-calculus is all there is to programming
(else, I wouldn't undertake this project); just that it's quite basic,
and I doubt anyone can go very far when ignoring the bases.
There sure are lots of other important aspects to programming
(and most of what's in "OO" is sure not among them, for instance).

PS: An Altavista search on
	+lambda +calculus tutorial introduction
did bring a list of interesting material.
Also, Matthias Felleisen of Rice University, has lots of fine teaching
material, from either his TeachScheme! project, or his Courses.
	http://www.cs.rice.edu/~matthias/
I'd appreciate a contribution to the lambda calculus section of the Review
project from people reading and selecting the better tutorials, articles, etc.

## Faré | VN: Уng-Vû Bân   | Join the TUNES project!  http://www.tunes.org/ ##
## FR: François-René Rideau |    TUNES is a Useful, Not Expedient System     ##
## Reflection&Cybernethics  | Project for a Free Reflective Computing System ##
... Another writer again agreed with all my generalities, but said that as an
inveterate skeptic I have closed my mind to the truth.  Most notably I have
ignored the evidence for an Earth that is six thousand years old.  Well, I
haven't ignored it; I considered the purported evidence and *then* rejected
it.  There is a difference, and this is a difference, we might say, between 
prejudice and postjudice.  Prejudice is making a judgment before you have
looked at the facts.  Postjudice is making a judgment afterwards.  Prejudice
is terrible, in the sense that you commit injustices and you make serious
mistakes.  Postjudice is not terrible.  You can't be perfect of course; you
may make mistakes also.  But it is permissible to make a judgment after you
have examined the evidence.  In some circles it is even encouraged.
                -- Carl Sagan, "The Burden of Skepticism"