-
Notifications
You must be signed in to change notification settings - Fork 0
/
1.41.scm
116 lines (75 loc) · 2.26 KB
/
1.41.scm
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
(define (double f)
(lambda (x) (f (f x))))
(define (inc x) (+ x 1))
(((double (double double)) inc) 5)
;; let's simulate applicative-order substitution
(((double (lambda (x) (double (double x)))) inc) 5)
(((lambda (x1) ((lambda (x) (double (double x)))
((lambda (x2) (double (double x2))) x1))) inc) 5)
(((lambda (x) (double (double x)))
((lambda (x2) (double (double x2))) inc)) 5)
(((lambda (x) (double (double x)))
(double (double inc))) 5)
(((lambda (x) (double (double x)))
(double (lambda (x1) (inc (inc x1))))) 5)
(((lambda (x) (double (double x)))
(lambda (x2) ((lambda (x1) (inc (inc x1)))
((lambda (x1) (inc (inc x1))) x2)))) 5)
;; f := (lambda (x2) ((lambda (x1) (inc (inc x1)))
;; ((lambda (x3) (inc (inc x3))) x2)))
(((lambda (x) (double (double x))) f) 5)
((double (double f)) 5)
((double (lambda (x) (f (f x)))) 5)
((lambda (x1) ((lambda (x) (f (f x)))
((lambda (x2) (f (f x2))) x1))) 5)
((lambda (x) (f (f x)))
((lambda (x2) (f (f x2))) 5))
((lambda (x) (f (f x)))
(f (f 5)))
;; f=>
((lambda (x) (f (f x)))
(f ((lambda (x2) ((lambda (x1) (inc (inc x1)))
((lambda (x3) (inc (inc x3))) x2))) 5)))
((lambda (x) (f (f x)))
(f ((lambda (x1) (inc (inc x1)))
((lambda (x3) (inc (inc x3))) 5))))
((lambda (x) (f (f x)))
(f ((lambda (x1) (inc (inc x1)))
(inc (inc 5)))))
((lambda (x) (f (f x)))
(f ((lambda (x1) (inc (inc x1))) 7)))
((lambda (x) (f (f x)))
(f (inc (inc 7))))
((lambda (x) (f (f x)))
(f 9))
;; f=>
((lambda (x) (f (f x)))
((lambda (x2) ((lambda (x1) (inc (inc x1)))
((lambda (x3) (inc (inc x3))) x2))) 9))
((lambda (x) (f (f x)))
((lambda (x1) (inc (inc x1)))
((lambda (x3) (inc (inc x3))) 9)))
((lambda (x) (f (f x)))
((lambda (x1) (inc (inc x1)))
(inc (inc 9))))
((lambda (x) (f (f x)))
((lambda (x1) (inc (inc x1)))
11))
((lambda (x) (f (f x)))
(inc (inc 11)))
((lambda (x) (f (f x))) 13)
(f (f 13))
;; f=>
(f ((lambda (x1) (inc (inc x1)))
((lambda (x3) (inc (inc x3))) 13)))
(f ((lambda (x1) (inc (inc x1)))
(inc (inc 13))))
(f (inc (inc 15)))
;; f=>
((lambda (x1) (inc (inc x1)))
((lambda (x3) (inc (inc x3))) 17))
((lambda (x1) (inc (inc x1)))
(inc (inc 17)))
(inc (inc 19))
;; finaly ...
21