似乎有很多聪明的事情都是用懒惰评估的语言完成的,这些例子在严格评估的环境中无法完成.例如,Haskell中的无限列表,或者用树中的最小值替换树中的每个元素.
是否有任何巧妙的事情用严格评估的语言完成的例子,用懒惰评估的语言不能轻易完成?
您可以使用急切(严格)语言而不是懒惰语言轻松完成的主要事项:
从源代码预测程序的时间和空间成本
允许副作用,包括可变数组的恒定时间更新,这使得更容易快速实现某些算法
在我看来,热切语言的主要好处是让代码以您想要的方式执行变得更加容易,并且很少有性能陷阱,其中代码的微小变化会导致性能的巨大变化.
话虽如此,总的来说我更喜欢在Haskell中编写复杂的东西.
没有; 有一些你可以做的事情*懒惰评估(AKA正常顺序减少,或左外侧减少)你不能用严格的评估,但不是相反的方式.
这样做的原因是懒惰评估在某种程度上是评估的"最通用"方式,这被称为:
计算充分性定理:如果某些评估顺序终止并产生特定结果,则延迟评估也将终止并产生相同的结果.
*(请注意,我们不是在谈论图灵等效)