Wie ist die Standardeinstellung sum
in Ghc ~ 10 mal langsamer als die foldl'
(stricter equivalentfoldl
) entspricht? Und wenn das der Fall ist, warum wird es nicht mit foldl'
implementiert?Warum ist die Summe langsamer als faltl 'in 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)
Zur Vollständigkeit sind hier auch die Statistiken von foldl
und 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)
Sieht aus wie sum
realisiert wird foldl
seit ihrer Laufzeit ähnlich ist. Getestet auf ghc 7.10.2.
Sie sind identisch, wenn Sie mit -O2 kompilieren. –
@JoachimBreitner tut mir leid – Carsten
Siehe auch: https://www.reddit.com/r/haskell/comments/2agxcb/why_is_sum_lazy/ – ZhekaKozlov