From b723750417f9f9fee561913c36fc48f7a0adcd0d Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Tue, 11 Feb 2025 02:37:31 -0400 Subject: [PATCH] Working extend-rec? --- Assignments/01.rkt | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/Assignments/01.rkt b/Assignments/01.rkt index 2171dac..f98d8d5 100644 --- a/Assignments/01.rkt +++ b/Assignments/01.rkt @@ -71,24 +71,17 @@ ; Needs to return new environment, with the boxed value containing the function, and a recursive reference to the same environment (define (extend-rec [env : Env] [sym : Symbol] [exp : Exp]) - (local [(define self (extend env sym exp)] - (begin - (set! (funV-nv self) env) - (hash-set self sym (box(interp exp self)))))) + (local [(define self (extend env sym (funV sym exp env)))] + (type-case (Optionof (Boxof Value)) (hash-ref self sym) + [(none) self] + [(some b) (begin + (set-box! b (funV sym exp self)) + self)]))) -#;(let* ([exp (parse `{lam x {f 0}})] +(let* ([exp (parse `{lam x {f 0}})] [env (extend-rec mt-env 'f exp)] [fun (lookup 'f env)]) - (begin - (display exp) - (display "\n") - (display env) - (display "\n") - (display fun) - (display "\n") - (display (funV-nv fun)) - (display "\n") - (test (funV-nv fun) env))) + (test (funV-nv fun) env)) (interp : (Exp Env -> Value)) (define (interp e nv)