“规则通常分成计算规则与位置规则:前者收缩 redex,后者把子项步骤提升到外层。位置规则也可由求值上下文统一写成 $E[r]\to E[r']$。值、redex 和上下文文法共同决定求值策略。”
形式陈述 ​
求值上下文是抽象语法中恰含一个洞
对左到右调用值 λ 演算,可令
其中
把根收缩
确定策略通常依赖唯一分解定理:每个既非值也非错误的良构闭项,要么明确卡住,要么可唯一写成
求值上下文只包含策略允许的下一步位置,不等于上下文等价量化的任意程序上下文。后者可把洞放在函数体、未执行分支或其他任意语法位置,用来测试程序观察;两类上下文的量词范围不同。
直觉
求值上下文把当前控制焦点编码成一个带洞的树。洞外部分记录“算完这里之后还要做什么”,洞内是下一步计算。替换洞内结果便恢复完整程序,不必为每条根规则重复所有外层传播规则。
上下文文法也是策略的可执行规格。是否进入 λ 体、应用先算函数还是参数、条件式是否只算守卫,都集中在这些产生式中;少一项会令合法程序卡住,多一项可能引入非确定性。
例子与边界
对左到右表达式
得到
对
若加入
推论与应用
求值上下文可重化为续延:上下文本身就是“取得洞中结果后继续做什么”。抽象机器把嵌套上下文拆成显式栈帧;CEK 机器的参数帧与函数帧正对应调用值应用上下文的两种产生式。
异常沿上下文向外传播,控制算子捕获部分上下文,代数效应处理器搜索最近处理边界。唯一分解还常为确定性和进展定理提供关键引理:先找到唯一
参考资料
- Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016, Chapter 5。
- Matthias Felleisen and Robert Hieb, “The Revised Report on the Syntactic Theories of Sequential Control and State,” Theoretical Computer Science 103(2), 1992, pp. 235–271。
- Gordon D. Plotkin, “A Structural Approach to Operational Semantics,” DAIMI FN-19, 1981; reprinted 2004。