私が特別な変数を持っているとしましょう:
(defvar x 20)
それから私は次のことをします:
(let ((x 1)) (eval '(+ x 1))
これは2と評価されます。
CLHSによると、evalは「現在の動的環境とnull字句環境でフォームを評価します」。したがって、2ではなく21を取得することを期待します。
私は何かが足りないのですか?
ここで、シンボルyの動的バインディングがない場合、評価します
(let ((y 1)) (eval '(+ y 1))
「変数Yはバインドされていません」という条件があります。これは、yに動的バインディングがないため、意味があります。
注:私はSBCL1.0.57を使用しています
事前にあなたの助けに感謝します!