Finish 1.rkt
This commit is contained in:
@ -32,7 +32,14 @@
|
|||||||
(interp bound-body (extend env bound-id (interp named-expr env)))]
|
(interp bound-body (extend env bound-id (interp named-expr env)))]
|
||||||
[(varE name) (lookup name env)]
|
[(varE name) (lookup name env)]
|
||||||
[(lamE bound-id bound-body) (lamV bound-id bound-body 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)
|
[(appE fun-expr arg-expr)
|
||||||
(let ([fval (interp fun-expr env)])
|
(let ([fval (interp fun-expr env)])
|
||||||
(type-case Value fval
|
(type-case Value fval
|
||||||
|
Reference in New Issue
Block a user