在lambda演算中按值调用

时间:2011-05-29 15:48:01

标签: lambda-calculus operator-precedence reduction

我正在通过Types and Programming Languages工作,皮尔斯通过降价策略调用,给出了术语id (id (λz. id z))的示例。内部重新引用id (λz. id z)首先缩减为λz. id z,在外部重新索引缩减为正常形式id (λz. id z)之前,将λz. id z作为第一次缩减的结果。

但按价值顺序调用被定义为“只有最外层的重新索引被减少”,并且“仅当其右侧已减少到某个值时,才会减少重新索引”。在示例id (λz. id z)出现在最外层redex的右侧,并且减少了。这与只有最外层的重新索引减少的规则有什么相似?

“最外层”和“最内层”的答案是否仅指代lambda抽象?因此,对于t中的λz. t项,t无法减少,但在重新索引s t中,t会减少为v如果可能,那么s v会减少吗?

2 个答案:

答案 0 :(得分:5)

简短回答:是的。你永远不能减少lambda术语,你只能从右边开始减少术语。

lambda-calculus中的评估上下文按值定义如下:

E = [ ] | (λ.t)E | Et

E是你可以看重的东西..

例如,在名称的lambda演算中,评估上下文是:

E = [ ] | Et | fE

因为即使术语不是值,您也可以减少应用程序。 例如,(λx.x)(z λx.x)在按值调用时停留,但在按名称调用时,它会缩减为(z λx.x),这是正常形式。
在语境中,语法f是一个普通形式(按名称调用),定义为:

f = λx.t | L  
L = x | L f

你可以在皮尔斯的第19.5.3章看到上下文的另一个定义。

答案 1 :(得分:2)

  

“最外层”和“最内层”的答案是否仅指代lambda抽象?因此对于λz中的项t。 t,t不能减少,但在redex s t中,如果可能的话,t减小到一个值v,然后减小s v?

是的,这是完全正确的。