Common Lisp the Language:“动态阴影不会发生”

时间:2014-11-14 15:11:00

标签: scope lisp common-lisp

在Common Lisp the Language的第3章末尾附近,Steele写道“使用词法范围的构造在每次执行时有效地为每个已建立的实体生成一个新名称。因此不能发生动态阴影(尽管词法阴影可能)”。我对“动态阴影无法发生”究竟意味着什么感到困惑。 “动态阴影”的例子是什么样的?

1 个答案:

答案 0 :(得分:2)

这是他可能意味着的一个例子:

(defun f (g)
  (let ((a 2))
    (funcall g a)))
(let ((a 1))
  (f (lambda (x) (- x a))))

这会在Common Lisp中返回1,因为af的词法绑定不会影响a在顶级let中的绑定因此,当f调用g时,它会从1中减去2,因为lambda会从顶级绑定中获得a。< / p>

将此与Emacs Lisp中的动态绑定进行对比,其中返回值为0

您可能还发现计算contorted-example并在CL和ELisp中尝试它是有益的。