标签、编码与琼斯最优性解析
1. 组合式求值器与特化
组合式求值器的递归调用都作用于左侧项的真子部分。对其进行特化包含两个步骤:
1. 展开所有对 eval 的调用,同时保持环境部分静态,以便在特化时查找变量。
2. 将求值器的其余部分重构为残余语法。
由于求值器是组合式的且输入项有限,展开所有对 eval 的调用会终止。例如,对 LAM ("x", APP (VAR "x", VAR "x")) 进行特化,会得到 FUN (fn v => app (v, v)) 。不过,这种特化并非琼斯最优,因为存在类型标签 FUN 和去标签操作 app 。
2. 残余语法与高阶抽象语法
可以将 FUN (fn v => app (v, v)) 视为高阶抽象语法。此时, FUN 是 lambda 抽象的标签, app 是应用的标签。我们可以将残余语法定义为 ML 数据类型:
datatype univ_res = INT_res of int
| FUN_res of univ_res -> univ_res
| APP_res of univ_res * univ_res
| ADD_r
超级会员免费看
订阅专栏 解锁全文
297

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



