(interp (parse '[let {[x (box 5)]} (begin (set-box! x (lambda (y) x)) ((unbox x) 8))]) mt-env mt-store) ... (interp (box 5) mt-env mt-store) ... ... (interp (numC 5) mt-env mt-store) result: (v*s (numV 5) mt-store) result: (v*s (boxV 1) store1=(override-store (cell 1 (numV 5)) mt-store)) ... (interp (beginC (set-box! x (lambda (y) x)) ((unbox x) 8)) env1=(extend-env (bind 'x (boxV 1)) mt-env) store1) ... ... (interp (set-box! x (lambda (y) x)) env1 store1) ... ... ... (interp (idC 'x) env1 store1) ... ... ... result: (v*s (boxV 1) store1) [class ended here, but to continue...] ... ... ... (interp (parse '{lambda {y} x}) env1 store1) ... ... ... Result: (v*s (closV 'y (parse 'x) env1) store1) ... ... Result: (v*s (closV 'y (parse 'x) env1) s2 = (override-store (cell 1 (closV 'y (parse 'x) env1)) store1)) ... ... (interp (parse '{{unbox x} 8}) env1 s2) ... ... ... (interp (parse '{unbox x}) env1 s2) ... ... ... ... (interp (parse 'x) env1 s2) ... ... ... ... Result: (v*s (boxV 1) s2) ... ... ... Result: (v*s (closV 'y (parse 'x) env1) s2) ... ... ... (interp (parse '8) env1 s2) ... ... ... Result: (v*s (numV 8) s2) ... ... ... (interp (parse 'x) e2 = (extend-env (bind 'y (numV 8)) env1) s2) ... ... ... (v*s (boxV 1) s2)