
A Short Introduction to the Lambda Calculus (2004) [pdf] - kumaranvpl
http://www.cs.bham.ac.uk/~axj/pub/papers/lambda-calculus.pdf
======
arethuza
I had to vote this up as it referenced a work by Greg Michaelson who did a
splendid job of teaching me about lambda calculus back in the 1980s and who
_really_ got my attention when he explained about S and K combinators.

Another excellent work from that same time is _The Implementation of
Functional Programming Languages_ by Simon Peyton Jones which is available
online for free:

[http://research.microsoft.com/en-
us/um/people/simonpj/papers...](http://research.microsoft.com/en-
us/um/people/simonpj/papers/slpj-book-1987/)

[Edit: I know this is an old work - but I'm very fond of it!]

~~~
futtetennista
Another (old) gem that I feel like suggesting to anyone interested in this
topic is 'Introduction to Functional Programming' by Philip Wadler and Richard
Bird, which is also available online for free:

[https://usi-pl.github.io/lc/sp-2015/doc/Bird_Wadler.%20Intro...](https://usi-
pl.github.io/lc/sp-2015/doc/Bird_Wadler.%20Introduction%20to%20Functional%20Programming.1ed.pdf)

------
astrobase_go
While the linked explanation makes obvious parallels between the lambda
calculus and other programming languages, I think Rojas is even yet more
accessible:

[http://www.inf.fu-berlin.de/lehre/WS03/alpi/lambda.pdf](http://www.inf.fu-
berlin.de/lehre/WS03/alpi/lambda.pdf)

------
0xdeadbeefbabe
Why is it a calculus and not an algebra?

Relational algebra is an algebra for example.

~~~
tel
"Algebra" and "calculus" are often used for historical reasons rather than
technical ones.

But as it were, LC cannot be expressed as a universal algebra. Not quite. The
lambda terms introduce local binding which throws off an algebraic
representation. The best you can do is have a (sorted) representation which
includes free variables and then have a quotient of that algebra be LC. Even
that doesn't quite work, though, since `x` is not a valid LC term.

~~~
0xdeadbeefbabe
> The lambda terms introduce local binding which throws off an algebraic
> representation.

Doesn't rho for renaming in relational algebra also have local binding?

It's good to know the reasons are historical though.

~~~
tel
Could be that the relational algebra isn't so much an algebra either. Also
could be that the renaming isn't really part of the "core" algebra. I'm not in
particular familiar with the relational algebra, though.

------
monkpit
Are there answers to the exercises? I'm kind of stuck on 3b in section 8.
Should I evaluate from right to left - normalize 'y' lambda given a y-value of
5?

Then, in that case, there is only one argument (const 10) to pass to the 'fx'
lambda and I guess you end up with a partial or something?

Or should the 'y' lambda and the constant 5 be considered the 2 parameters
passed to the 'fx' lambda? In which case I guess the answer comes to be const
20?

~~~
tromp
> I'm kind of stuck on 3b in section 8.

So you managed to do exercise 8.7 ? I wonder if there is an answer shorter
than 22 symbols...

Nice instance of lambda golfing!

~~~
monkpit
No, because I got stuck on question 3 :)

Also, I find questions like 8.7 to be really uninteresting - it seems like
busywork.

------
amelius
The Y combinator is explained on page 7 :)

