基本上,[("x",4),("y",5)] 等环境 p 定义变量 x 和 y 的值。当您评估可能涉及此类变量的表达式时,结果取决于p。这由\p -> ... 表示。
例如,我们可以期待类似的东西
Exp + Exp { \p -> $1 p + $2 p }
表示使用p 定义的相同变量值来评估这两个术语的事实。
现在,let 很特别,因为它定义了一个新变量,并给它一个值。为了表达这一事实,我们需要更改 p 并用新的关联来扩充它。
let var = Exp in Exp
$1 $2 $3 $4 $5 $6
给定p,$4 的值就是$4 p,就像我们在前面的 sum 示例中所做的那样(我们假设 var 在 $4 中不可见,也就是说,我们不允许 var递归定义)。写
value_of_$4 = $4 p
但是,$6 的值不是 $6 p,因为 $6 必须“看到”新定义的 var。所以我们写
value_of_$6 = $6 (p augmented with the association <<var = value_of_$4>>)
那是
value_of_$6 = $6 ( ($2,value_of_$4) : p )
那是
value_of_$6 = $6 ( ($2, $4 p) : p )
所以我们结束了
let var = Exp in Exp { \p -> $6 ( ($2, $4 p) : p ) }
$1 $2 $3 $4 $5 $6