It seems that MzScheme’s one argument eval has backdoor access to the top level namespace.
(define a 43) (let ((a 42)) (eval 'a)) ; => 43 (eval (list 'set! (string->symbol (string-append "ca" "r")) cdr)) car ; => #<primitive:cdr> (car '(2 . 3)) ; => 3Any one argument eval that I have imagined has some such excess authority. Moral: don't pass your eval to those that you don't trust and don’t apply it to code that you have not vetted. I recommend beginning programs with (define (eval e n) (eval e n)) thus sequestering the dangerous form of eval.
In the sample car was damaged by code that did not contain its name. The R5RS omits the one argument eval.