Каким образом значение по умолчанию sum
в ghc составляет ~ 10 раз медленнее, чем его foldl'
(stricter equivalent из foldl
) эквивалентно? И если это так, почему это не реализовано с использованием foldl'
?Почему сумма медленнее, чем foldl 'в haskell?
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