抽象 λ 演算机:原理、实现与比较
1. fn se(m)cd 机器规则与操作
在 λ 演算机的操作中,有一系列规则来规范其运行。规则 (4b) 不仅将控制结构 C 中由 deBruijn 索引访问的条目移动到值栈 S 上,还会将位于栈 M 顶部的构造符号所附带的索引减 1,以此表明对其某个子表达式的遍历已完成。规则 (5a/b) 和 (6) 则负责处理在头部(或运算符)位置用 S 上的挂起项替换 deBruijn 索引的环境访问情况。当挂起项实际上是一个闭包(即包含一个抽象)时,会创建一个新的上下文,在这个上下文中,抽象体将在闭包所附带的环境中进行求值。
对于头部归一化脊柱中剩余的应用节点尾部的挂起项,规则 (9) 会为其在新的上下文中设置求值操作。该规则可拆分为两个连续步骤:
- (9a) (eb : [ E′ e′ a ] : S, E, @(0) : M, C, D, U) →([ E′ e′ a ] : S, E, @∗: M, eb : C, D, U)
- (9b) ([ E′ e′ a ] : S, E, @∗: M, eb : C, D, U) →(S, E′, nil, e′ a : nil, (U, @∗: M, eb : C, D), U)
特殊的应用符 @∗ 作为标记,用于表示对其尾部挂起项的求值。当从新上下文返回时,规则 (10) 会利用这个应用符恢复原始的栈配置。规则 (0) 则用于从另一个上下文的挂起项求值中返回,它会拦截控制结构为空且跟踪栈为空的配置,恢复保存在转储 D 中的调用上下文。剩余的规则 (7a/b) 和 (11a/b) 用于从
超级会员免费看
订阅专栏 解锁全文
71

被折叠的 条评论
为什么被折叠?



