Lexical vs dynamic scoping in terms of SICP's Environment Model of Evaluation

喜夏-厌秋 提交于 2019-12-05 15:23:00

问题


In Section 3.2.2 of SICP the execution of the following piece of code

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

is explained in terms of this diagram.

Each time a function is applied, a new frame is created (labeled by E1 through E4) which represents a set of bindings between symbols and values. When a symbol is not bound in a frame, that frame's enclosing environment is queried for a binding of that particular symbol.

The interesting thing about this diagram is that all the frames labelled by E is contained in the global environment. The text explains that this is because the functions was defined in the global environment, but does not elaborate on the issue:

Notice that each frame created by square points to the global environment, since this is the environment indicated by the square procedure object.

If instead frames where contained in the environment that the function was called in, say E3 was contained in E2 which in turn was contained in E1, would that be a valid model of how a dynamically scoped language works? Also, is the way that the frames in the diagram have the same 'parent' environment because Scheme is lexically scoped?


回答1:


The answer to both questions is yes. That chapter of SICP is explaining lexical scope without actually using the term. Changing the evaluation mechanism as you describe would create a dynamically-scoped model.



来源:https://stackoverflow.com/questions/12763979/lexical-vs-dynamic-scoping-in-terms-of-sicps-environment-model-of-evaluation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!