[Haskell-cafe] How to improve its performance ?

Daniel Fischer daniel.is.fischer at web.de
Thu Mar 18 22:24:38 EDT 2010


Am Freitag 19 März 2010 02:56:36 schrieb zaxis:
> %cat Test.hs
> module Test(mcombs)
> where
> import Data.List
>
> mcombs = foldr (flip (>>=) . f) [[]]  where f x xs = [x:xs,xs]
>
> %ghc -c -O2 Test.hs
> %ghci
>
> > :l Test
>
> Ok, modules loaded: Test.
>
> > :set +s
>
> length $ mcombs [1..20]
> 1048576
> (0.06 secs, 56099528 bytes)
>
> > length $ mcombs [1..50]
>
> ^CInterrupted.
>

Yes, 2^50 = 1125899906842624.

If your computer generated 10^9 sublists per second, you'd wait more than 
ten days for the answer. Since something like 25 million - 100 million per 
second is more in the region of what ordinary computers can achieve, it'd 
rather be three months to over a year.

Prelude Parts> mcombs [1 .. 50] !! 100000000
[1,2,3,4,5,6,7,8,10,11,12,13,18,20,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50]
(4.35 secs, 5254369992 bytes)
Prelude Parts> length $ replicate (10^8) ()
100000000
(2.10 secs, 2806344336 bytes)

Really, not bad, IMO.


More information about the Haskell-Cafe mailing list