首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浅绑定方案与深绑定方案

浅绑定方案与深绑定方案
EN

Stack Overflow用户
提问于 2016-10-13 03:11:42
回答 1查看 1.2K关注 0票数 2

假设动态作用域,如果显示语句是浅绑定还是深绑定,那么它会有什么区别?我理解浅层绑定是在调用时绑定的,deep是在作为参数传递时绑定的,但我不确定它在方案上下文中是如何工作的。我认为深度装订应该打印2,但我不确定

代码语言:javascript
复制
(define A 
    (let* ((x 2)
           (C (lambda (P) 
                 (let ((x 4))
                    (P))))
           (D (display x))
           (B (let ((x 3))
                   (C D))))
        (B)))
EN

回答 1

Stack Overflow用户

发布于 2019-04-24 21:46:19

让我们来发挥一些定义:

  • 深度绑定在将过程作为参数传递时绑定环境。
  • 浅绑定在实际调用过程时绑定环境。

因此,唯一的区别将是对C的评估,它发生在B内。

代码语言:javascript
复制
(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)))

代码语言:javascript
复制
(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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40011675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档