Am Sonntag, 26. Juni 2005 21:02 schrieben Sie:
> On Sun, 26 Jun 2005, Daniel Fischer wrote:
> > >    m x y = if x==0 then 0 else x*y
> >
> > Plain
> >
> > foldr m 1
> >
> > does fine, in fact much better than
> >
> > foldl' (*) 1 . upTo (== 0),
> >
> > both in hugs and ghc, regarding speed and memory usage.
>
> E.g.
>   foldr m 1 [a,b,c]
>
> means
>   m a (m b (m c 1)))
>
> That is, it is not possible for the runtime system to store interim
> numeric results, it can only accumulate function calls.

Well, yes, but since 'm' is lazy in the second argument, the list isn't 
traversed past the first zero - like foldr (&&) True.

Try a list like [1 .. 20000] ++ [0 .. 50000], compile for profiling and see.

I'm not sure why, but upTo eats much more memory than foldr m 1.

Cheers,
Daniel
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to