使用let表达式绑定的变量是本地的,因为这些绑定只在let的躯体部分可见。Scheme 允许通过以下方式创建 top-level 绑定:
(define x 23)
(define y 42)
(+ x y)
==>65
最开始的两个式子为定义; 它们创建了 top-level 绑定, 将 x
绑定到 23
, 将 y
绑定到 42
。 定义不是表达式(expressions), 不是所有的使用表达式的地方都可以使用定义。除了上面这些,还有一点:定义没有返回值。
绑定遵从程序的语法结构:当对于一个名字的多个绑定存在时,变量将指向距其最近的绑定值,按照从引用的位置开始从内到外的顺序,如果没有找到本地绑定,使用 top-level 绑定。
(define x 23)
(define x 42)
(let ((y 43)) (+ x y))
==>66
(let ((y 43)) (let ((y 44)) (+ x y)))
==>67