From 9ef493af9bf4e2d8e31a6116c43f7febaa156f0b Mon Sep 17 00:00:00 2001 From: Matei Cloteaux Date: Sun, 8 Dec 2024 15:16:29 -0500 Subject: [PATCH] Fix eq? evaluation Ldyn --- interp-Ldyn.rkt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/interp-Ldyn.rkt b/interp-Ldyn.rkt index 92c41f1..64d9de4 100644 --- a/interp-Ldyn.rkt +++ b/interp-Ldyn.rkt @@ -7,6 +7,11 @@ ;; A copy of this interpreter is in the book and should be ;; kept in sync with this code. +(define (tagged-eq? v1 v2) + (match* (v1 v2) + [((Tagged v1 t1) (Tagged v2 t2)) (eq? v1 v2)] + [(v1 v2) (eq? v1 v2)])) + (define (interp-op op) (match op ['+ fx+] @@ -99,7 +104,7 @@ (match (Tagged-value (recur e1)) [#f (Tagged #t 'Boolean)] [else (Tagged #f 'Boolean)])] [(Prim 'eq? (list e1 e2)) - (Tagged (equal? (recur e1) (recur e2)) 'Boolean)] + (Tagged (tagged-eq? (recur e1) (recur e2)) 'Boolean)] [(Prim op (list e1)) #:when (set-member? type-predicates op) (tag-value ((interp-op op) (Tagged-value (recur e1))))]