ghc में डिफ़ॉल्ट sum
कैसे foldl'
(stricter equivalentfoldl
) से 10 गुना धीमा है? समकक्ष? और यदि ऐसा है, तो इसे 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 पर परीक्षण किया।
यदि आप -ओ 2 के साथ संकलित करते हैं तो वे वही हैं। –
@ जोचिमब्रेटनर क्षमा करें – Carsten
यह भी देखें: https://www.reddit.com/r/haskell/comments/2agxcb/why_is_sum_lazy/ – ZhekaKozlov