什么时候thunk更好?

时间:2014-05-05 10:24:07

标签: functional-programming lazy-evaluation thunk

什么时候使用懒惰评估而不是急切评估更好?当你知道表达式只计算一次或者从不计算时,它会更好吗?

2 个答案:

答案 0 :(得分:2)

如果您可以选择,请对可能根本不进行评估的表达式使用延迟评估,或者在评估时在某些情况下可能导致编程错误。

经典案例在C语言的大多数语言中实现,被称为"短路运算符":

if (i != 0 && n/i > 100) ...

这里,n/i > 100只会在i不为0时计算。这很好,因为它可以避免零分割错误。

答案 1 :(得分:1)

Why Functional Programming Matters是支持懒惰评估的典型论据,主要是作为改进模块化的推动者。

我可以通过筛选Eratosthenes为您提供一个懒惰的素数配方,

primes = (cons 2 . diff [3..] . bigU . map (\p-> [p*p, p*p+p..])) primes

.)是函数组合,diff是集合差异,bigU找到(有序的)有序列表(有序的,增加的)数字列表{{1} }是map等等,没有懒惰的语义就必须将maintain all kinds of mechanics explicitly混合在一起,而不是使用与函数组合链接在一起的这些漂亮的单独模块化函数。