MzScheme version 352 > (eval '(set! car 0) (scheme-report-environment 5)) > car # > (eval (set! car 0) (scheme-report-environment 5)) > car 0 > (eval `(,(lambda (x) (- x)) 4)) -4 ; The interpreter encounter not a procedure expression, but a procedure in the code. (let ((e1 (scheme-report-environment 5)) (e2 (scheme-report-environment 5))) (and (not (eq? e1 e2)) (begin (eval '(set! car 0) e1) (eq? (eval 'car e2) car)))) ; => #t (eq? car (eval car (scheme-report-environment 5))) ; => #t (eq? (null-environment 5) (null-environment 5)); => #f