假设动态作用域,如果浅层或深层绑定,显示语句会有什么区别? 我理解浅层绑定是在调用时绑定的,而深层绑定是在作为参数传递时绑定的,但我不确定它在方案的上下文中是如何工作的。我认为深度绑定应该打印2但我不确定
(define A
(let* ((x 2)
(C (lambda (P)
(let ((x 4))
(P))))
(D (display x))
(B (let ((x 3))
(C D))))
(B)))
答案 0 :(得分:0)
让我们来定义一下:
因此,唯一的区别在于B内部发生的C评估。
(define A
(let* ((x 2)
(C (lambda (P)
(let ((x 4))
(P))))
(D (display x))
(B (let ((x 3))
(C D))))
(B)))
另一方面,代码本身似乎有错误,(显示x)不会返回值,但会传递给C。
假设您的意思是(D (lambda () (display x)))
(define A
(let* ((x 2)
(C (lambda (P)
(let ((x 4))
(P))))
(D (lambda () (display x)))
(B (let ((x 3))
(C D))))
(B)))
在深度绑定下,当D传递给C时x的值为3,因此我们应该期望打印出3。
在浅层绑定下,当实际调用该过程时,x的值为4,因此将打印出4。