使用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