词汇与动态范围在SICP的环境评估模型方面

时间:2012-10-06 21:21:02

标签: scheme sicp lexical-scope dynamic-scope

在SICP的Section 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)

根据this diagram进行解释。

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

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

  

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

如果代替调用函数的环境中包含的框架,E3包含在E2中,E1又包含在{{1}}中,那将是一个有效的模型动态范围的语言如何工作?另外,图中的帧是否具有相同的“父”环境,因为Scheme是词法范围的?

1 个答案:

答案 0 :(得分:5)

这两个问题的答案是。 SICP的那一章正在解释词汇范围,而没有实际使用该术语。如您所述更改评估机制将创建动态范围的模型。

相关问题