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

ddk*_*ddk 11 scheme sicp dynamic-scope lexical-scope

在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)
Run Code Online (Sandbox Code Playgroud)

根据该图解释.

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

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

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

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

its*_*uce 5

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