Repository navigation
Expand file tree
/
Copy pathlambda-core.ark
More file actions
70 lines (60 loc) · 1.37 KB
/
Copy pathlambda-core.ark
File metadata and controls
70 lines (60 loc) · 1.37 KB
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Logic
(let _true (fun (x)
(fun (y &x) x)))
(let _false (fun (x)
(fun (y) y)))
(let _not (fun (b)
((b _false) _true)))
(let _and (fun (b1)
(fun (b2 &b1)
((b1 b2) _false))))
(let _or (fun (b1)
(fun (b2 &b1)
((b1 _true) b2))))
## Examples
(let read_bool (fun (b)
(print ((b "true") "false"))))
(print "Logic
-----
True / False")
(read_bool _true)
(read_bool _false)
(print "Not")
(read_bool (_not _true))
(read_bool (_not _false))
(print "And")
(read_bool ((_and _true) _true))
(read_bool ((_and _true) _false))
(read_bool ((_and _false) _true))
(read_bool ((_and _false) _false))
(print "Or")
(read_bool ((_or _true) _true))
(read_bool ((_or _true) _false))
(read_bool ((_or _false) _true))
(read_bool ((_or _false) _false))
# Church Numerals
(let _zero (fun (f) (fun (x) x)))
(let _succ (fun (n)
(fun (f &n)
(fun (x &n &f)
(f ((n f) x))))))
(let _pred (fun (n)
(fun (f &n)
(fun (x &n &f)
(((n (fun (g &f) (fun (h &g &f) (h (g f))))) (fun (u &x) x)) (fun (a) a))))))
(let _one (_succ _zero))
## Examples
(let read_church (fun (n)
(print ((n (fun (x) (+ x 1))) 0))))
(print "
Church Numerals
---------------
Zero / Succ")
(read_church _zero)
(read_church _one)
(read_church (_succ _one))
(read_church (_succ (_succ _one)))
(print "Pred")
(read_church (_pred _one))
(read_church (_pred (_succ _one)))
(read_church (_pred (_succ (_succ _one))))