|
1 // Church-Peano integers |
|
2 |
|
3 var Zero = f => x => x; |
|
4 var Succ = n => f => x => n(f)(f(x)); |
|
5 var Add = a => b => f => x => a(f)(b(f)(x)); |
|
6 var Mul = a => b => f => x => a(b(f))(x); |
|
7 var Exp = a => b => b(a); |
|
8 |
|
9 var n = f => f(k => k + 1)(0); |
|
10 |
|
11 assertEq(n(Zero), 0); |
|
12 assertEq(n(Succ(Zero)), 1); |
|
13 assertEq(n(Succ(Succ(Zero))), 2); |
|
14 |
|
15 var Three = Succ(Succ(Succ(Zero))); |
|
16 var Five = Succ(Succ(Three)); |
|
17 assertEq(n(Add(Three)(Five)), 8); |
|
18 assertEq(n(Mul(Three)(Five)), 15); |
|
19 assertEq(n(Exp(Three)(Five)), 243); |