-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathlib.lisp
More file actions
59 lines (56 loc) · 1.21 KB
/
lib.lisp
File metadata and controls
59 lines (56 loc) · 1.21 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
(defn(
; Nice examples.
(fac (lambda (n) (cond
((eq n 0) 1)
(T (mul n (fac (sub n 1))))
)))
(gcd (λ (x y) (cond ; Yes, you can use λ. It's prettier.
((gt x y) (gcd y x))
((eq (rem y x) 0) x)
(T (gcd (rem y x) x))
)))
(ack (λ (m n) (cond
((eq m 0) (add n 1))
((eq n 0) (ack (sub m 1) 1))
(T (ack (sub m 1) (ack m (sub n 1))))
)))
(equal (λ (x y) (cond
((eq x y) T)
((atom x) F)
((atom y) F)
((equal (car x) (car y)) (equal (cdr x) (cdr y)))
(T F)
)))
; Helpers.
(not (λ (m) (cond
(m F)
(T T)
)))
(negate (λ (n) (sub 0 n)))
(mapcar (λ (fn list) (cond
((null list) nil)
(T (cons (fn (car list)) (mapcar fn (cdr list))))
)))
(length (λ (l) (cond
((null l) 0)
(T (add 1 (length (cdr l))))
)))
; Demo of building a function.
(opN (λ (op N) (list 'λ '(a) (list op N 'a))))
; From the book.
(member (λ (x list) (cond
((null list) F)
((equal x (car list)) T)
(T (member x (cdr list)))
)))
(union (λ (x y) (cond
((null x) y)
((member (car x) y) (union (cdr x) y))
(T (cons (car x) (union (cdr x) y)))
)))
(intersection (λ (x y) (cond
((null x) nil)
((member (car x) y) (cons (car x) (intersection (cdr x) y)))
(T (intersection (cdr x) y))
)))
))