Skip to content

Commit 64a6521

Browse files
committed
c4 22
1 parent 4d2ab8e commit 64a6521

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

src/eval/c4_22.scm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
; in eval1.scm

src/eval/eval.scm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
(define (eval-sequence exps env)
8282
(cond ((null? exps)
8383
(error 'eval-sequence "no expression in code in block"))
84-
(( last-exp? exps)
84+
((last-exp? exps)
8585
(seck-eval (first-exp exps) env))
8686
(else
8787
(seck-eval (first-exp exps) env)

src/eval/eval1.scm

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
((lambda? exp) (analyze-lambda exp))
2727
((begin? exp) (analyze-sequence (begin-actions exp)))
2828
((cond? exp) (analyze (cond->if exp)))
29+
((let? exp) (analyze (let->combination exp)))
2930
((application? exp) (analyze-application exp))
3031
(else
3132
(error 'analyze "unknown expression type" exp))))
@@ -103,7 +104,10 @@
103104
proc))))
104105

105106
(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))))
107111

108112
(define (test-analyze)
109113
(seck-eval '(define (fact n)
@@ -114,3 +118,10 @@
114118
global-env)
115119
(println (seck-eval '(fact 3) global-env))
116120
)
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))

0 commit comments

Comments
 (0)