Finish 1.rkt
This commit is contained in:
@ -32,7 +32,14 @@
|
||||
(interp bound-body (extend env bound-id (interp named-expr env)))]
|
||||
[(varE name) (lookup name env)]
|
||||
[(lamE bound-id bound-body) (lamV bound-id bound-body env)]
|
||||
[(callWith with-id with-expr fun-expr arg-expr) ....]
|
||||
; Wordy double extend, as first setting up the f-env with the value it is dynamically scoped with.
|
||||
; Then, extending that environment with the function that is being used on the value.
|
||||
[(callWith with-id with-expr fun-expr arg-expr)
|
||||
(let ([fval (interp fun-expr env)])
|
||||
(type-case Value fval
|
||||
[(lamV bound-id bound-body f-env)
|
||||
(interp bound-body (extend (extend f-env with-id (interp with-expr env)) bound-id (interp arg-expr env)))]
|
||||
[else (error 'interp "non-function")]))]
|
||||
[(appE fun-expr arg-expr)
|
||||
(let ([fval (interp fun-expr env)])
|
||||
(type-case Value fval
|
||||
|
Reference in New Issue
Block a user