正常订单的步骤少于应用订单的示例?

时间:2015-12-26 02:13:39

标签: lambda-calculus

我似乎无法想出这样的例子,并想知道是否有这种情况?我知道如果我有一个表达式,其中应用订单不会终止,正常的订单可能仍会终止。我想知道是否有一个例子,两个订单都终止但正常订单的步骤更少。

2 个答案:

答案 0 :(得分:1)

(λp.λq.q)((λx.λy.λz。((x y)z))(λw.λv.w))

有一些空白:

(λ p. 
   λ q.
     q
)
(
  (λ x.
     λ y.
       λ z.
         ((x y) z)
   )
   (λ w.
      λ v.
        w
   )
)

按正常顺序,可以首先执行最外侧的缩减,在一个步骤中直接缩减到识别组合器。应用顺序也会到达,但由于需要首先评估x-y-z-w-v表达式,因此需要更长的时间。

请注意,x-y-z-w-v表达式甚至不是使用。您可以将正常顺序视为一种惰性评估:表达式仅在使用时进行评估或减少。因此,您只需构建一个不使用其中一个参数的公式,并立即获得此类效率获胜的示例。

答案 1 :(得分:0)

在lambda表达式中,抽象中绑定的任何变量都可以在抽象体中使用零次或多次。

  • 正常顺序会对参数进行n次计算,其中n是在正文中使用的次数。
  • 申请顺序只需对参数进行一次评估,无论其在体内使用的次数如何。

比较

  1. 如果参数恰好使用,则正常顺序和应用顺序都将具有相同的效果。
  2. 如果参数多次使用,则应用订单会更快。
  3. 如果参数使用零次,则正常顺序会更快。