类型安全的更新编程:原理与实践
1. 更新操作基础
更新操作的结果是 σ(r),即 r 中所有元变量根据 σ 进行替换后的结果。若 l 与 e 不匹配,则规则描述的更新不会执行,e 保持不变。对于类型,我们也使用匹配定义和符号。若类型 t 匹配另一个类型 t′(即 t ≻ t′),则称 t′ 是 t 的一个实例。
1.1 更新组合器
我们可以通过交替和递归从规则构建更复杂的更新:
- 交替更新 :两个更新 u1 和 u2 的交替,写作 u1 ; u2,首先尝试执行更新 u1。若 u1 可以应用,则结果表达式也是 u1 ; u2 的结果。只有当 u1 无法应用时,才尝试更新 u2。
- 递归更新 :为了将更新深入到表达式中,引入递归运算符 ↓,它会以自上而下的方式将其参数更新应用到所有子表达式。例如,将更新 ↓(1 ⇝ 2) 应用于 1+(1+1),结果为 2+(2+2)。
1.2 作用域更新
在作用域更新中,定义 let v = d in e 的每个元素(v、d 或 e)都可以更改。变量更新可以是简单的重命名,而定义和作用域的更新可以是任意复杂的。我们使用语法 {v⇝v′: ud}uu 进行更新,它将 v 重命名为 v′,通过 ud 更改 v 的定义,并通过 uu 更改其所有使用。其中,uu 总是递归应用,而 ud 仅应用于定义的根。对于递归 let 定义,我们也会将 uu 递归应用于 ud 更新后的结果。
更新的语法如下:
u :
超级会员免费看
订阅专栏 解锁全文

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



