首页 文章

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

提问于
浏览
11

在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创建的每个框架都指向全局环境,因为这是方形过程对象指示的环境 .

相反,在包含在调用函数的环境中的框架中,比如 E3 包含在 E2 中,而 E2 又包含在 E1 中,那么它是否是动态范围语言如何工作的有效模型?另外,图中帧的方式是否具有相同的'parent'环境,因为Scheme是词法范围的?

1 回答

  • 5

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

相关问题