hello list,
I just released version 8 of LambdaMessageSend, aka FunctionalTalk:
http://map.squeak.org/package/6bc04644-035c-4d47-a513-f7cde7b01bad/autoversion/8release notes:
it is now very easy to do proper lambda calculus
(not that it is very useful, but I believe it provides a sound proof of
concept for the whole LambdaMessageSend idea).
for example the third Church numeral
L f x. f (f (f x))
can simply be constructed this way:
x := Lambda x.
f := Lambda f.
n3 := f apT: (f apT: (f apT: x)).
and then
n3 <~ (Lambda x + 1) <~ 0
will indeed return 3
more complex functions such as the predecessor operator
L n f x. n (L g h. h (g f)) (L u. x) (L u. u)
require more care but are still rather straightforward to build:
g := Lambda g.
h := Lambda h.
pred := ((((n apT: Lambda gh) apT: Lambda ux) apT: Lambda uu)
<<@@ {
#gh -> ((h apT: (g apT: f)) ofVariables: {g . h}).
#ux -> (x ofVariables: {Lambda u}).
#uu -> Lambda u
}) ofVariables: {n . f . x}.
... see FunctionalTalkTest>>testChurchNumerals for more details
Stef