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)
以下是我对 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)