1

什么时候使用惰性评估而不是急切评估更好?当您知道表达式将只计算一次或永远不会计算时会更好吗?

4

2 回答 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找到(有序,递增)数字列表的(有序)列表的并集,mapismap等....,如果没有惰性语义,则必须显式维护各种机制, 混合在一起,而不是使用这些很好的单独模块化函数与函数组合链接在一起。

于 2014-05-05T22:16:22.303 回答