【发布时间】:2017-02-22 00:39:10
【问题描述】:
假设动态范围,如果它是浅绑定或深绑定,显示语句会有什么区别? 我知道浅绑定是在调用时绑定,而深绑定是在作为参数传递时绑定,但我不确定这在方案的上下文中是如何工作的。我认为深度绑定应该打印 2 但我不确定
(define A
(let* ((x 2)
(C (lambda (P)
(let ((x 4))
(P))))
(D (display x))
(B (let ((x 3))
(C D))))
(B)))
【问题讨论】:
-
@greenteam 您能否提供您的资料来源以解释什么是浅/深绑定?此外,Scheme 是词法的,所以也许你的意思是一般的 lisp,如果是这样的话,也许应该重新标记为“lisp”?
-
这个编辑是错误的,因为它改变了帖子太多,所以我回滚了。
-
@WillNess 老实说,这个问题来自 3 年前我在大学上一门函数式编程课程时,自从课程结束后我就没有看过这些材料。如果我说我记得足以解释它的差异,那我就是在撒谎。如果我没记错的话,深度绑定占用了相关函数的父函数的范围,而浅绑定占用了最后一个函数的范围来调用相关函数。 (如果措辞令人困惑,我们深表歉意)
-
谢谢。顺便说一句,参考是Shallow Binding in LISP 1.5。