-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathint99
More file actions
44 lines (38 loc) · 1009 Bytes
/
int99
File metadata and controls
44 lines (38 loc) · 1009 Bytes
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
; Small integer arithmetics with
; domain and range = (0..99) and
; operations P (predecessor),
; S (successor), and Z (is zero).
; No overflow checking.
(setq numbers
'( 0 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
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99))
(setq defnums
(macro
(lambda ()
(cons 'prog
(loop next ((ns numbers))
(cond ((null ns) nil)
(else @((setq ,(car ns) ',(car ns))
,@(next (cdr ns))))))))))
(defnums)
(setq S
(lambda (n)
(cadr (memb n numbers))))
(setq P
(lambda (n)
(loop p ((ns numbers))
(cond ((eq n (cadr ns))
(car ns))
(else
(p (cdr ns)))))))
(setq Z
(lambda (n)
(eq n 0)))