I don't immediately see the bug. apply evaluates all its arguments, and set! evaluates its second argument, so
(define x 'foo) (apply set! 'x 'bar ()) becomes (#_set! x bar), but bar is not defined when evaluated by set! Similarly (define bar 'the-bar) (apply set! 'x bar ()) ; bar is not quoted -> 'the-bar becomes (#_set! x the-bar) because bar evaluates to the-bar which set! tries to evaluate (as a symbol), but it is not defined. (apply set! 'x 'bar ()) becomes (#_set! x bar) where bar is 'the-bar, so x is set to 'the-bar, so (eq? x 'the-bar) is #t. There is one level of evaluation here for the car (set! -> #_set!) and the target of set!, but two levels for the value (apply does one, and set! the other). _______________________________________________ Cmdist mailing list [email protected] https://cm-mail.stanford.edu/mailman/listinfo/cmdist
