Scheme let bound 语句

Scheme let bound statements

以下是我对 Scheme 的 class 笔记:

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

答案是35。谁能给我解释一下? 所以在第 2 行 z(+x y) x 值似乎是 2 但在那之后 (* z x) x 值是 7?非常感谢

(let ((x 2) (y 3))

这里第一个let仍然负责直到所有值都被绑定。

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

这里是第二个let负责。

    (* z x)))

如果你想在 (z (+ x y)) 中使用 (x 7) 然后尝试 let*

测试

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

> 35

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

> 70

希望对您有所帮助。

也许更简单的解释方法是将 let 视为匿名过程调用的语法糖。

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

等同于:

((lambda (x y)
   ((lambda (x z)
      (* z x))     ; first here is x 7
     7
     (+ x y)))     ; this x is from the outer
 2
 3)