[Haskell-cafe] Re: Optimization fun
Creighton Hogg
wchogg at gmail.com
Sat Feb 10 17:21:00 EST 2007
On 2/10/07, apfelmus at quantentunnel.de <apfelmus at quantentunnel.de> wrote:
>
> Creighton Hogg wrote:
> > Hello Haskell-ers,
> > So a friend and I were thinking about making code faster in Haskell, and
> I
> > was wondering if there was a way to improve the following method of
> > generating the list of all prime numbers. It takes about 13 seconds to
> > run, meanwhile my friend's C version took 0.1.
> > I'd love to learn a bit more about how to optimize Haskell code.
>
> Of course, the best optimization is a better algorithm. In case this is
> what you're after, have a look at
>
> Colin Runciman, Lazy Wheel Sieves and Spirals of Primes
> http://citeseer.ist.psu.edu/runciman97lazy.html
<snip helpfullness>
The glitches may have been unintentional, but the flaw intentionally
> degrades performance: you should not use a strict all' but the lazy
>
> all prop = foldr (\y z -> prop y && z) True
>
> from the Prelude. The point is that the lazy version stops inspecting
> the elements of the remaining list whenever (prop y) turns False for the
> first time. This is because && is lazy:
>
> False && x = False
>
> for whatever x we supply. For example, take the list
>
> [True, False, True, True] ++ replicate 100 True
>
> Here, all returns False after inspecting the first two elements while
> all' inspects every one of the 104 list elements just to return False
> afterwards. As every second number is even, your all' is busy wasting
> time like crazy.
Okay, this is sinking in a good bit better, thank you. I think I've had a
conceptual block about what laziness really means.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070210/49e526b7/attachment.htm
More information about the Haskell-Cafe
mailing list