gpt4 book ai didi

haskell - foldl 是否比它严格的表亲 foldl' 更可取?

转载 作者:行者123 更新时间:2023-12-03 11:37:02 26 4
gpt4 key购买 nike

Haskell 有两个用于列表的左折叠函数:foldl ,和一个“严格”版本,foldl' .非严格 foldl 的问题是它建立了一个 thunk 塔:

    foldl (+) 0 [1..5]
--> ((((0 + 1) + 2) + 3) + 4) + 5
--> 15

这会浪费内存,如果列表中的项目太多,可能会导致堆栈溢出。 foldl' ,另一方面,在每个项目上强制累加器。

但是,据我所知, foldl'语义上等价于 foldl .评估 foldl (+) 0 [1..5]头部正常形式需要在某些时候强制累加器。如果我们不需要 head-normal 形式,我们就不会评估 foldl (+) 0 [1..5]首先。

是否有任何令人信服的理由想要 foldl 的行为?超过 foldl' ?

最佳答案

foldlfoldl'不是语义等价的。微不足道的反例:

Prelude Data.List> foldl (\x y -> y) 0 [undefined, 1]
1
Prelude Data.List> foldl' (\x y -> y) 0 [undefined, 1]
*** Exception: Prelude.undefined

然而,在实践中,您通常需要严格的 foldl'因为你提到的原因。

关于haskell - foldl 是否比它严格的表亲 foldl' 更可取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com