11

在SICP 的第 3.2.2 节中,执行以下代码

(define (square x)
  (* x x))
(define (sum-of-squares x y)
  (+ (square x) (square y)))
(define (f a)
  (sum-of-squares (+ a 1) (* a 2)))

(f 5)

用这张图来解释。

每次应用函数时,都会创建一个新框架(由E1through标记E4),它表示符号和值之间的一组绑定。当符号未绑定在框架中时,将查询该框架的封闭环境以获取该特定符号的绑定。

该图的有趣之处在于,所有标记为 的帧E都包含在全局环境中。文中解释说这是因为函数是在全局环境中定义的,但没有详细说明这个问题:

请注意,由 所创建的每个帧都square指向全局环境,因为这是square过程对象所指示的环境。

相反,如果框架包含在调用函数的环境中,比如E3包含在E2其中,又包含在 中E1,那么这是否是动态范围语言如何工作的有效模型?此外,图中的框架是否具有相同的“父”环境,因为 Scheme 是词法范围的?

4

1 回答 1

6

这两个问题的答案都是肯定的。SICP 的那一章是在解释词法范围而没有实际使用该术语。按照您的描述更改评估机制将创建一个动态范围的模型。

于 2012-10-07T11:08:20.817 回答