scheme 局部变量

局部变量,这将会使定义函数变得更加容易。

  • let表达式
    变量在binds定义的形式中被声明并初始化。body由任意多个S-表达式构成。binds的格式如下:
    [binds] → ((p1 v1) (p2 v2) ...)
    声明了变量p1、p2,并分别为它们赋初值v1、v2。变量的作用域(Scope)为body体,也就是说变量只在body中有效。

let表达式可以用于引用定义在同一个绑定中的变量。实际上,let只是嵌套的let表达式的语法糖而已。

(let ((i 1))
  (let ((j (+ i 2)))
    (* i j)))
(let* ((i 1) (j (+ i 2)))
  (* i j))
;Value: 3

实际上,let表达式只是lambda表达式的一个语法糖:

(let ((p1 v1) (p2 v2) ...) exp1 exp2 ...)
;⇒
((lambda (p1 p2 ...)
    exp1 exp2 ...) v1 v2)

总结

  • let表达式是lambda表达式的一个语法糖。变量的作用域通过使用let表达式或lambda表达式来确定。在Scheme中,这个有效域由源代码的编写决定,这叫做词法闭包(lexical closure)。

你可能感兴趣的:(scheme 局部变量)