-
Notifications
You must be signed in to change notification settings - Fork 0
/
numbers.lambda
33 lines (28 loc) · 865 Bytes
/
numbers.lambda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
0 = false
1 = λf.λx.f x
2 = λf.λx.f (f x)
3 = λf.λx.f (f (f x))
4 = λf.λx.f (f (f (f x)))
5 = λf.λx.f (f (f (f (f x))))
6 = λf.λx.f (f (f (f (f (f x)))))
7 = λf.λx.f (f (f (f (f (f (f x))))))
8 = λf.λx.f (f (f (f (f (f (f (f x)))))))
9 = λf.λx.f (f (f (f (f (f (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.λf.m (n f)
pow = λb.λe.e b
pred = λn.λf.λx.n (λg.λh.h (g f)) (λu.x) (λu.u)
sub = λm.λn.n pred m
iszero = λn.n (λx.false) true
leq = λm.λn.iszero (sub m n)
eq = λm.λn.and (leq m n) (leq n m)
lt = λm.λn.leq (succ m) n
gt = λm.λn.not (leq m n)
geq = λm.λn.leq n m
div = λn.λd.Y (λr.λq.(lt q d) 0 (succ (r (sub q d)))) n
mod = λn.λd.(sub n (mult d (div n d)))
min = λm.λn.(lt m n) m n
max = λm.λn.(lt m n) n m
even = λn.n not true
odd = λn.n not false