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