首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Let和Let的模式混淆*

Let和Let的模式混淆*
EN

Stack Overflow用户
提问于 2011-11-07 21:00:42
回答 2查看 487关注 0票数 4
代码语言:javascript
复制
(let ((x 2) (y 3)
  (let ((x 7)
        (z (+ x y)))
    (* z x)))

使用上面的代码,为什么答案是35,而不是70?在第二个let中,x是7,所以z应该是7+3= 10,然后结果应该是7* 10 = 70。我知道得到另一个是让*我很困惑这2个。样本是从谷歌抓取的。我已经在谷歌上搜索了,但就是找不到。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-07 21:18:59

在调用(+ x y)时,x仍然绑定到外部let

票数 2
EN

Stack Overflow用户

发布于 2011-11-07 21:23:16

扩展一下勒皮的答案:如果你写了

代码语言:javascript
复制
(let ((x 2) (y 3))
    (let* ((x 7)
           (z (+ x y)))
       (* z x)))

你会得到你所期望的答案。内部let*恰好等同于

代码语言:javascript
复制
(let ((x 7))
    (let ((z (+ x y)))
       (* z x)))

事实上,在某些方案中可能会以这种方式实现。

换句话说,在let*表单中,第一个绑定之后的每个后续绑定都在先前创建的所有绑定的作用域中。

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

https://stackoverflow.com/questions/8036840

复制
相关文章

相似问题

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