【问题标题】:Scheme Confusing of Let and Let*混淆 Let 和 Let* 的方案
【发布时间】:2011-12-23 14:58:12
【问题描述】:
(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。我知道有另一个是 let* 我在这 2 之间很困惑。示例是从谷歌抓取。我已经谷歌了,但就是无法得到它。

【问题讨论】:

    标签: scheme let


    【解决方案1】:

    扩展 Leppie 的回答:如果你写过

    (let ((x 2) (y 3))
        (let* ((x 7)
               (z (+ x y)))
           (* z x)))
    

    你会得到你期望的答案。内部let* 完全等价于

    (let ((x 7))
        (let ((z (+ x y)))
           (* z x)))
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 2015-11-17
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 2015-10-18
        • 2012-11-21
        相关资源
        最近更新 更多