From 7cf2339c160b27bd465cc56a2cc88fef70009266 Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Thu, 24 Apr 2025 09:00:18 -0300 Subject: [PATCH] Finish 1.rkt --- Final/1.rkt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Final/1.rkt b/Final/1.rkt index d0b89f7..11c768b 100644 --- a/Final/1.rkt +++ b/Final/1.rkt @@ -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