经典按需计算:线性头部归约与按需调用的融合探索
1. 背景引入
在计算机科学中,计算策略的选择对程序的执行效率和结果有着深远的影响。常见的计算策略包括按值调用(call-by-value)和按名调用(call-by-name),它们各有优劣。按值调用可能会触发不必要的计算,导致潜在的非终止问题;而按名调用则是按需计算程序,但在处理实际使用的参数时可能会重复计算。
为了更好地理解这些计算策略,我们来看一个简单的例子:
t ≡(λx. I) (Δ Δ) →cbn I
t ≡(λx. I) (Δ Δ) →cbv t →cbv . . . →cbv . . .
在这个例子中,按值调用会反复计算 Δ Δ ,而按名调用则直接丢弃这个参数。这体现了按名调用的按需计算特性。
2. 按需计算与线性头部归约
2.1 按需计算
按需计算(Call-by-need)是一种旨在结合按值调用和按名调用优点的策略。它在需要时触发计算,并避免重复计算。Wadsworth 在 1971 年引入了惰性求值(Lazy evaluation)的概念,这可以看作是按需计算的一种实现方式。然而,设计和推理按需计算的演算(calculi)是复杂的,直到 1994 年,Ariola 和 Felleisen 以及 Maraist、Odersky 和 Wadler 才分别提出了类似的解决方案。
Ariola 和 Felleisen 的演算(AF-calculus)定义如下:
| 类型 | 定义 | <
超级会员免费看
订阅专栏 解锁全文
864

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



