根据 SICP 的环境评估模型进行词汇与动态范围界定



在 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)

根据此图进行了解释。

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

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

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

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

这两个问题的答案都是肯定的。 SICP的这一章解释了词汇范围,但没有实际使用该术语。 更改所描述的评估机制将创建动态范围的模型。

最新更新