什么时候使用惰性评估而不是急切评估更好?当您知道表达式将只计算一次或永远不会计算时会更好吗?
问问题
196 次
2 回答
3
如果您可以选择,请对可能根本不被计算的表达式使用惰性计算,或者在计算时在某些情况下可能导致编程错误。
经典案例在大多数源自 C 的语言中实现,称为“短路运算符”:
if (i != 0 && n/i > 100) ...
在这里,n/i > 100
只会在i
不为 0 时计算。这很好,因为它避免了除零错误。
于 2014-05-05T10:34:41.360 回答
1
为什么函数式编程很重要是支持惰性评估的典型论据,主要是作为改进模块化的促进者。
我可以给你举个例子,通过 Eratosthenes 的筛子来计算素数的惰性公式,
primes = (cons 2 . diff [3..] . bigU . map (\p-> [p*p, p*p+p..])) primes
( .
) 是函数组合,diff
是集合差异,bigU
找到(有序,递增)数字列表的(有序)列表的并集,map
ismap
等....,如果没有惰性语义,则必须显式维护各种机制, 混合在一起,而不是使用这些很好的单独模块化函数与函数组合链接在一起。
于 2014-05-05T22:16:22.303 回答