clisp(common lisp)で
>(let ((x 'hello)) (eval '(print x)) )
を実行するとXが定義されていないというエラーになるが、
emacs lispで実行するとエラーにならず、HELLOが表示される。
clispでは関数evalの実行時レキシカル変数(言わばローカルな変数)
は巻き込まれない。これはコンパイルする時、Xが未決定であることに
よるのであろう。emacs lispにコンパイラはない。
さらには
>(defun test () (print y)) >(let ((y 'world)) (test) )
としてもclispはYが未定義というエラーを出すがemacs lispでは
WORLDが表示される。emacs lispはユーザ定義関数実行時ですら
ローカルな変数を巻き込む。emacs lispはcommon lispではなく
Lispの方言の1つとうたわれている。
jpnslispではevalに関してはemacs lispのようにレキシカル変数を
巻き込む。jpnslispのC++ソースのある所をNULL、0にすれば
レキシカル変数を巻き込まないようにすることができるが
コンパイラもないことだしあるマクロ定義の際などに有用であると
思われるので残している(jpnslisp日本語Lisp3.11、jpnslisp
日本語Lisp for Linux2.11)。