/
ex5.37-1.scm
149 lines (149 loc) · 4.14 KB
/
ex5.37-1.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
(save continue)
(save env)
(save continue)
(assign val (op make-compiled-procedure) (label entry2) (reg env))
(restore continue)
(goto (label after-lambda1))
entry2
(assign env (op compiled-procedure-env) (reg proc))
(assign env (op extend-environment) (const (n)) (reg argl) (reg env))
(save continue)
(save env)
(save continue)
(save env)
(save continue)
(assign proc (op lookup-variable-value) (const =) (reg env))
(restore continue)
(restore env)
(restore continue)
(save continue)
(save proc)
(save env)
(save continue)
(assign val (const 1))
(restore continue)
(assign argl (op list) (reg val))
(restore env)
(save argl)
(save continue)
(assign val (op lookup-variable-value) (const n) (reg env))
(restore continue)
(restore argl)
(assign argl (op cons) (reg val) (reg argl))
(restore proc)
(restore continue)
(test (op primitive-procedure?) (reg proc))
(branch (label primitive-branch17))
compiled-branch16
(assign continue (label after-call15))
(assign val (op compiled-procedure-entry) (reg proc))
(goto (reg val))
primitive-branch17
(save continue)
(assign val (op apply-primitive-procedure) (reg proc) (reg argl))
(restore continue)
after-call15
(restore env)
(restore continue)
(test (op false?) (reg val))
(branch (label false-branch4))
true-branch5
(save continue)
(assign val (const 1))
(restore continue)
(goto (reg continue))
false-branch4
(save continue)
(save env)
(save continue)
(assign proc (op lookup-variable-value) (const *) (reg env))
(restore continue)
(restore env)
(restore continue)
(save continue)
(save proc)
(save env)
(save continue)
(assign val (op lookup-variable-value) (const n) (reg env))
(restore continue)
(assign argl (op list) (reg val))
(restore env)
(save argl)
(save continue)
(save env)
(save continue)
(assign proc (op lookup-variable-value) (const factorial) (reg env))
(restore continue)
(restore env)
(restore continue)
(save continue)
(save proc)
(save continue)
(save env)
(save continue)
(assign proc (op lookup-variable-value) (const -) (reg env))
(restore continue)
(restore env)
(restore continue)
(save continue)
(save proc)
(save env)
(save continue)
(assign val (const 1))
(restore continue)
(assign argl (op list) (reg val))
(restore env)
(save argl)
(save continue)
(assign val (op lookup-variable-value) (const n) (reg env))
(restore continue)
(restore argl)
(assign argl (op cons) (reg val) (reg argl))
(restore proc)
(restore continue)
(test (op primitive-procedure?) (reg proc))
(branch (label primitive-branch8))
compiled-branch7
(assign continue (label after-call6))
(assign val (op compiled-procedure-entry) (reg proc))
(goto (reg val))
primitive-branch8
(save continue)
(assign val (op apply-primitive-procedure) (reg proc) (reg argl))
(restore continue)
after-call6
(assign argl (op list) (reg val))
(restore proc)
(restore continue)
(test (op primitive-procedure?) (reg proc))
(branch (label primitive-branch11))
compiled-branch10
(assign continue (label after-call9))
(assign val (op compiled-procedure-entry) (reg proc))
(goto (reg val))
primitive-branch11
(save continue)
(assign val (op apply-primitive-procedure) (reg proc) (reg argl))
(restore continue)
after-call9
(restore argl)
(assign argl (op cons) (reg val) (reg argl))
(restore proc)
(restore continue)
(test (op primitive-procedure?) (reg proc))
(branch (label primitive-branch14))
compiled-branch13
(assign val (op compiled-procedure-entry) (reg proc))
(goto (reg val))
primitive-branch14
(save continue)
(assign val (op apply-primitive-procedure) (reg proc) (reg argl))
(restore continue)
(goto (reg continue))
after-call12
after-if3
after-lambda1
(restore env)
(perform (op define-variable!) (const factorial) (reg val) (reg env))
(assign val (const ok))
(restore continue)