在Common Lisp the Language的第3章末尾附近,Steele写道“使用词法范围的构造在每次执行时有效地为每个已建立的实体生成一个新名称。因此不能发生动态阴影(尽管词法阴影可能)”。我对“动态阴影无法发生”究竟意味着什么感到困惑。 “动态阴影”的例子是什么样的?
答案 0 :(得分:2)
这是他可能意味着的一个例子:
(defun f (g)
(let ((a 2))
(funcall g a)))
(let ((a 1))
(f (lambda (x) (- x a))))
这会在Common Lisp中返回1
,因为a
中f
的词法绑定不会影响a
在顶级let
中的绑定因此,当f
调用g
时,它会从1
中减去2
,因为lambda
会从顶级绑定中获得a
。< / p>
将此与Emacs Lisp中的动态绑定进行对比,其中返回值为0
。
您可能还发现计算contorted-example
并在CL和ELisp中尝试它是有益的。