32、类型安全的更新编程:原理与实践

类型安全的更新编程:原理与实践

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 :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值