今天,当我在编写一个小脚本时,我使用foldl
了foldl'
. 我得到了stack overflow
,所以我导入Data.List (foldl')
并对此感到满意。这是我的默认工作流程foldl
。只foldl'
在懒惰的版本落下评估时使用。
Real World Haskell
说我们应该在大多数情况下使用foldl'
而不是。Foldr Foldl Foldl'说foldl
通常选择在
foldr
和之间foldl'
。...
但是,如果组合函数的第一个参数是惰性的,
foldl
则可能会愉快地返回foldl'
遇到异常的结果。
和一个给定的例子:
(?) :: Int -> Int -> Int
_ ? 0 = 0
x ? y = x*y
list :: [Int]
list = [2, 3, undefined, 5, 0]
okey = foldl (?) 1 list
boom = foldl' (?) 1 list
好吧,我很抱歉,但这是相当学术的,有趣但学术的例子。所以我问,有没有实际使用的例子foldl
?我的意思是,当我们无法替换foldl
为foldl'
.
PS 我知道,很难定义 term practical
,但我希望你能理解我的意思。
PPS我明白了,为什么懒惰foldl
是haskell的默认设置。我不要求任何人搬山并默认使用严格的版本。我只是对foldl
函数独占使用的例子很感兴趣:)
PPPS 好吧,foldl
欢迎任何有趣的用法。