假设动态作用域,如果显示语句是浅绑定还是深绑定,那么它会有什么区别?我理解浅层绑定是在调用时绑定的,deep是在作为参数传递时绑定的,但我不确定它在方案上下文中是如何工作的。我认为深度装订应该打印2,但我不确定
(define A
(let* ((x 2)
(C (lambda (P)
(let ((x 4))
(P))))
(D (display x))
(B (let ((x 3))
(C D))))
(B)))发布于 2019-04-24 21:46:19
让我们来发挥一些定义:
因此,唯一的区别将是对C的评估,它发生在B内。
(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。
https://stackoverflow.com/questions/40011675
复制相似问题