今天,当我在编写一个小脚本时,我使用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欢迎任何有趣的用法。