ラムダ計算

youzさんの記事からラムダ計算に興味を持ったので少しやってみました。

c0 = ^(f):^(x): x
c1 = ^(f):^(x): f(x)
c2 = ^(f):^(x): f(f(x))
c3 = ^(f):^(x): f(f(f(x)))

succ = ^(n):^(f):^(x): f(n(f)(x))
plus = ^(m):^(n):^(f):^(x): m(f)(n(f)(x))
mult = ^(m):^(n): m(plus(n))(c0)

inc = ^(n): n + 1
cyan> c2(inc)(0)
 => 2
cyan> succ(c3)(inc)(0)
 => 4
cyan> plus(c1)(c2)(inc)(0)
 => 3
cyan> mult(c2)(c3)(inc)(0)
 => 6

なるほど!これは面白いですね。