【发布时间】:2016-09-19 12:22:38
【问题描述】:
我对按值调用 lambda 演算有一些疑问。
1) λx.(λy.y)x 是一个卡住项还是应该计算为 λx.x?
2) λx.(λy.y)(λz.z),这个呢?
3) 执行中如何控制求值顺序?
我感到很困惑,谁能解释一下这些值,卡住的术语,评估的顺序,如何控制?
提前致谢!
【问题讨论】:
-
Lamda 演算仅定义如何评估术语。不是实际发生的情况和顺序 - 留给实施,以选择评估策略。纯函数的意义在于它并不重要,你总会得到相同的结果。
-
@Bergi 但不同的评估策略会导致不同的结果...
-
@naomik 不适用于纯函数,至少在您不考虑异常的情况下。
-
@Bergi,考虑
(λx.z) ((λw.ww) (λw.ww))- 使用正常顺序评估它会导致z。但是使用应用顺序它永远不会终止。 -
@naomik 对,这就是我所说的例外。
标签: lambda functional-programming lambda-calculus