File tree Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Original file line number Diff line number Diff line change
1
+ ; in eval1.scm
Original file line number Diff line number Diff line change 81
81
(define (eval-sequence exps env )
82
82
(cond ((null? exps)
83
83
(error 'eval-sequence " no expression in code in block" ))
84
- (( last-exp? exps)
84
+ ((last-exp? exps)
85
85
(seck-eval (first-exp exps) env))
86
86
(else
87
87
(seck-eval (first-exp exps) env)
Original file line number Diff line number Diff line change 26
26
((lambda? exp) (analyze-lambda exp))
27
27
((begin? exp) (analyze-sequence (begin-actions exp)))
28
28
((cond? exp) (analyze (cond->if exp)))
29
+ ((let? exp) (analyze (let->combination exp)))
29
30
((application? exp) (analyze-application exp))
30
31
(else
31
32
(error 'analyze " unknown expression type" exp))))
103
104
proc))))
104
105
105
106
(define (analyze-assignment exp )
106
- (error 'analyze-assignment " not implemented" ))
107
+ (let ((var (assignment-var exp))
108
+ (vproc (analyze (assignment-value exp))))
109
+ (lambda (env )
110
+ (set-variable-value! var (vproc env) env))))
107
111
108
112
(define (test-analyze )
109
113
(seck-eval ' (define (fact n )
114
118
global-env)
115
119
(println (seck-eval ' (fact 3 ) global-env))
116
120
)
121
+
122
+ (define (test-let )
123
+ (seck-eval ' (let ((a 1 )
124
+ (b 2 ))
125
+ (set! a (* a b))
126
+ (+ a b))
127
+ global-env))
You can’t perform that action at this time.
0 commit comments