-
Notifications
You must be signed in to change notification settings - Fork 1
/
math.llisp
47 lines (38 loc) · 925 Bytes
/
math.llisp
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
(define and
(lambda (x y)
(if x (if y true false)
false)))
(define or
(lambda (x y)
(if x true
(if y true false))))
(define xor
(lambda (x y)
(if x (if y false true)
(if y true false))))
(define not
(lambda (x)
(if x false true)))
(define add
(lambda (x y cin)
(xor (xor x y) cin)))
(define carry
(lambda (x y cin)
(or (and x y) (and cin (xor x y)))))
(define +
(lambda (x y)
((lambda (x1 y1 xr yr)
(if (not xr)
(cons (carry x1 y1 false)
(cons (add x1 y1 false) nil))
((lambda (sr)
((lambda (cin)
(cons (carry x1 y1 cin)
(cons (add x1 y1 cin)
(rest sr))))
(first sr)))
(+ xr yr))))
(first x) (first y) (rest x) (rest y))))
(define 3 (quote (() true true)))
(define 7 (quote (true true true)))
(print (+ 3 7))