Finish 1.rkt

This commit is contained in:
2025-04-24 09:00:18 -03:00
parent 6a7e549304
commit 7cf2339c16

View File

@ -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