3.2评估的环境模型

3.2评估的环境模型
当我们在第一章介绍复合程序时,在1.1.5部分中,我们使用评估的替换模型来定义出把程序应用到参数上的含义。

为了应用一个复合程序到参数上,要评估程序体,并且把形式参数替换成对应的实际参数。

一旦我们把赋值语句加入到我们的语言中,这样的定义就不充足了。特别是在3.1.3部分中的讨论那样,
有赋值语句的存在,一个变量不再被认为仅是一个值的名称了。而是一个变量必须要在某种程度上
控制一个值被存储的地方。在我们的新的评估模型中,这些地方被维护在叫做环境的结构中。

一个环境是一个帧的序列。任何一个帧是一个表,它可能是空的,在表中有对变量的名称和值的关联的信息。
(一个帧中可能包括着对任何一个变量的最多一个绑定)。任何一个帧也都有一个指针指向它的外部的环境。
为了讨论的需要,这个帧被认为是全局的。在一个环境中的一个变量的值,是由包含了这个变量的绑定的环境的
第一帧中的变量绑定的值。如果没有帧指定了变量的绑定,那么变量被告知,在环境中没有绑定。
                     ——————
                     |       I  |
                     | x:3      |
                     | y:5      |
                     ------------
                       ^     ^  
                      C |    | D
          -----------   |    |       |----------- 
          |       II|   |    |       |       III|
          |z:6      |---|    |-------|n:1       |
          |x:7      |                |y:2       |
          -----------                ------------
             ^                           ^
             |                           |
             A                           B
图3.1 一个简单的环境变量

图3.1显示出一个简单的环境结构包括三个帧。标签是I,II,III。在图例的,ABCD是指向环境的指针。
C和D指向相同的环境。变量z和x被绑定在帧II中。 变量y和x被绑定在帧 I中。 变量 x在环境 D中的值是3,
变量  x在环境 B中的值 也是3。这是按照如下的方式决定的。
我们检查序列中的第一个帧也就是帧III,没有发现变量x的绑定。所以我们继续找到外部的环境D,找到帧I中的绑定。
另一个方面,在环境A中的变量x的值是7。因为在序列的第一个帧中也就是帧II中包括了变量x的绑定,值为7。
对于环境A来说,在帧II中的变量x绑定为7,覆盖了在帧I中的变量x绑定为3。

对于评估流程来说,环境是重要的,因为它决定了表达式被评估的上下文。的确,一种可能的说法是在编程语言中的表达式
不能说有任意的含义。而是,一个表达式有一个意义仅当它在某种环境中被评估。即使是表达式的解释像
(+ 1 1)正常,依赖于对+这个符号的加法的操作的理解。 因此,在我们的评估的模型中,我们总是说评估一个表达式,在
某个环境中。为了描述与解释器的交互,我们将假定有一个全局的环境,包括一个单独的帧。这个帧没有外部环境。
包括关联到原生程序的符号的值。例如,+是一个做加法的符号,也可以说,符号+被绑定到了全局环境中的原生的加法程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值