正常顺序的步骤比应用顺序少的示例?
An example of where normal order has less steps than applicative order?
我似乎想不出这样的例子,想知道是否有这样的例子?我知道如果我有一个表达式,其中应用顺序不会终止,那么正常顺序可能仍会终止。我想知道是否有一个例子,两个订单都终止但正常订单的步骤更少。
(λ 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 表达式甚至都没有使用。您可以将正常顺序视为一种惰性求值:表达式仅在使用时才求值或归约。因此,您只需构建一个不使用其中一个参数的公式,您就会立即获得这种效率取胜的示例。
在 lambda 表达式中,抽象中绑定的任何变量都可以在抽象主体中使用零次或多次。
- 正常顺序 计算参数 n 次,其中 n 是它在正文中使用的次数。
- 应用顺序 仅对参数求值一次,无论它在正文中使用的次数如何。
比较
- 如果使用参数 exactly once,正常顺序和应用顺序将具有相同的性能。
- 如果参数被使用多次,应用顺序会更快。
- 如果使用参数零次,正常顺序会更快。
我似乎想不出这样的例子,想知道是否有这样的例子?我知道如果我有一个表达式,其中应用顺序不会终止,那么正常顺序可能仍会终止。我想知道是否有一个例子,两个订单都终止但正常订单的步骤更少。
(λ 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 表达式甚至都没有使用。您可以将正常顺序视为一种惰性求值:表达式仅在使用时才求值或归约。因此,您只需构建一个不使用其中一个参数的公式,您就会立即获得这种效率取胜的示例。
在 lambda 表达式中,抽象中绑定的任何变量都可以在抽象主体中使用零次或多次。
- 正常顺序 计算参数 n 次,其中 n 是它在正文中使用的次数。
- 应用顺序 仅对参数求值一次,无论它在正文中使用的次数如何。
比较
- 如果使用参数 exactly once,正常顺序和应用顺序将具有相同的性能。
- 如果参数被使用多次,应用顺序会更快。
- 如果使用参数零次,正常顺序会更快。