Scott Turner wrote:
 
> It's still possible to use fold and get short circuiting with good memory 
> usage.
>   upTo pred = foldr (\a -> \xs -> if pred a then [a] else a:xs) []
>   prodList = foldl' (*) 1 . upTo (== 0)
> It might be considered cheating, but AFAICT the test for ==0 needs to be 
> separated from the multiplication proper.

They don't need to be separated, though the result is no longer as clear
as one might wish:

prodList xs = foldr (\x f a -> if x == 0 then 0 else f $! x * a) id xs 1


Udo.
-- 
Wise men talk because they have something to say; fools, because they
have to say something.  --  Plato (429-347 BC)

Attachment: signature.asc
Description: Digital signature

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

Reply via email to