不以惰性语言终止的算法

时间:2011-07-09 13:39:37

标签: functional-programming lazy-evaluation

根据http://www.reddit.com/r/programming/comments/gwqa2/the_real_point_of_laziness/c1rslxk

  

有些算法并不是以一种急切的语言终止,而是以懒惰的方式终止,(对我来说,这是一种轻微的震惊),反之亦然。

前者当然是众所周知的,但后者让我感到震惊,如果是真的,那将远远超过温和的震撼。

有谁知道一种算法以一种急切的语言终止而不是一种懒惰的语言?

2 个答案:

答案 0 :(得分:11)

维基百科为lambda演算回答了这个问题:Lambda Calculus Reduction Strategies

关键部分是:

  

申请顺序不是规范化策略。 [...]相反,正常的顺序是这样称呼的,因为如果存在正常的顺序,它总是会发现正常化。

这显示了延迟评估的更强大的属性:如果存在使特定程序终止的评估策略,则程序也以惰性评估终止。因此,特别严格的评估(应用顺序)不允许任何程序在延迟评估下终止该循环。

维基百科页面上的参考文献提供了证据。

答案 1 :(得分:3)

我将走出困境并声明在纯粹的功能性渴望环境中终止的算法将无法在纯粹的功能性惰性环境中终止。

正在讨论的文章没有提到这一点,评论之后是一个不符合的例子的请求。因此,在找到一个例子之前我会说不。