ghc中的默認sum
如何比其foldl'
(foldl
的stricter equivalent)等效地慢10倍?如果是這樣的話,爲什麼它不使用foldl'
?爲什麼在Haskell中總和比foldl'慢?
import Data.List
> foldl' (+) 0 [1..10^7]
50000005000000
(0.39 secs, 963,528,816 bytes)
> sum [1..10^7]
50000005000000
(4.13 secs, 1,695,569,176 bytes)
爲了完整這裏也是foldl
和foldr
的統計信息。
> foldl (+) 0 [1..10^7]
50000005000000
(4.02 secs, 1,695,828,752 bytes)
> foldr (+) 0 [1..10^7]
50000005000000
(3.78 secs, 1,698,386,648 bytes)
貌似sum
使用foldl
,因爲它們的運行時類似於實施。測試ghc 7.10.2。
如果使用-O2進行編譯,它們是相同的。 –
@JoachimBreitner對不起 – Carsten
另請參閱:https://www.reddit.com/r/haskell/comments/2agxcb/why_is_sum_lazy/ – ZhekaKozlov