Let和Let *令人困惑的方案

时间:2011-11-07 13:00:42

标签: scheme let

(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。样本是来自谷歌的抓取。我已经google但是无法得到它。

2 个答案:

答案 0 :(得分:5)

扩展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*形式中,第一个之后的每个连续绑定都在所有先前创建的绑定的范围内。

答案 1 :(得分:2)

在调用x时,

let仍绑定在外(+ x y)