church-2.js (490B)
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);