【发布时间】:2020-11-26 20:48:57
【问题描述】:
考虑一下这些不同的尝试,比如last:
Prelude> import Data.Foldable
Prelude Data.Foldable> foldr const undefined (reverse [1,2,3])
3
Prelude Data.Foldable> foldr' const undefined (reverse [1,2,3])
3
Prelude Data.Foldable> foldl (flip const) undefined [1,2,3]
3
Prelude Data.Foldable> foldl' (flip const) undefined [1,2,3]
*** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:5:21 in interactive:Ghci4
foldl 和 foldr 都可以工作,因为它们的累加器并不严格,对我来说很有意义,foldl' 没有,因为确实如此。但是为什么foldr' 有效?它的累加器不应该也很严格吗?
【问题讨论】:
标签: haskell lazy-evaluation fold strictness