// Church-Peano integers | |
var Zero = f => x => x; | |
var Succ = n => f => x => n(f)(f(x)); | |
var Add = a => b => f => x => a(f)(b(f)(x)); | |
var Mul = a => b => f => x => a(b(f))(x); | |
var Exp = a => b => b(a); | |
var n = f => f(k => k + 1)(0); | |
assertEq(n(Zero), 0); | |
assertEq(n(Succ(Zero)), 1); | |
assertEq(n(Succ(Succ(Zero))), 2); | |
var Three = Succ(Succ(Succ(Zero))); | |
var Five = Succ(Succ(Three)); | |
assertEq(n(Add(Three)(Five)), 8); | |
assertEq(n(Mul(Three)(Five)), 15); | |
assertEq(n(Exp(Three)(Five)), 243); |