From: Sam S. <sd...@gn...> - 2007-10-08 15:02:23
|
Eli Bendersky wrote: > > Consider this code: > > (defun printer (val) > (lambda () (format t "~a~%" val))) > > (setq printer-of-10 (printer 10)) > (funcall printer-of-10) > > It prints "10" as expected. However, consider this code: > > (defvar val 12) > (funcall printer-of-10) > > It prints 12 ! this is, of course, not compliant. to get the compliant behavior, you will need to compile the code, e.g., by adding (declare (compile)) to the printer definition. ISTR that this behavior was implemented intentionally to ease interactive development, because "usually" the printer above would be followed by a (forgotten) defvar. Or something like that. Maybe Bruno will chime in? Sam. |