On Wed, 17 Jun 2009 13:32:40 +0200, Yitzchak Gale
Henk-Jan van Tuyl wrote:
reverse maximum minimum
Oh yes, please fix those also!
maximum' = foldl' max 0 [1 .. 999999] minimum' = foldl' min 0 [1 .. 999999]
scanl scanr scanr1 iterate take drop splitAt inits
Hmm, I use those all the time with large lists. They are lazy as expected, and seem to work fine. Do you have examples of problems with them?
A hugs (version: Sep 2006) session: Hugs> last $ scanl const 0 [0 .. 10 ^ 6] ERROR - C stack overflow Hugs> head $ scanr (+) 0 [1 .. 10 ^ 6] ERROR - C stack overflow Hugs> head $ scanr1 (+) [1 .. 10 ^ 6] ERROR - C stack overflow Hugs> iterate (+ 1) 0 !! (10 ^ 6) ERROR - C stack overflow Hugs> last $ take (10 ^ 6) [1 ..] 1000000 Hugs> head $ drop (10 ^ 6) [1 ..] 1000001 Hugs> head . snd $ splitAt (10 ^ 6) [1 ..] 1000001 Data.List> last $ last $ inits [1 .. 10 ^ 6] ERROR - C stack overflow A GHCi 6.10.1 session: Prelude> last $ scanl const 0 [0 .. 10 ^ 6] 0 Prelude> head $ scanr (+) 0 [1 .. 10 ^ 6] *** Exception: stack overflow Prelude> head $ scanr1 (+) [1 .. 10 ^ 6] *** Exception: stack overflow Prelude> iterate (+ 1) 0 !! (10 ^ 6) *** Exception: stack overflow Prelude> last $ take (10 ^ 6) [1 ..] 1000000 Prelude> head $ drop (10 ^ 6) [1 ..] 1000001 Prelude> head . snd $ splitAt (10 ^ 6) [1 ..] 1000001 Prelude> :m Data.List Prelude Data.List> last $ last $ inits [1 .. 10 ^ 6] ??? (not finished yet) take, drop and splitAt seem to work fine now, but when I did these tests the first time, GHCi generated a stack overflow exception (I think it was GHCi 6.8.3).
foldM filterM (Bulat)
foldM' f a (x:xs) = do a' <- f a x a' `seq` foldM' f a' xs -- Met vriendelijke groet, Henk-Jan van Tuyl -- http://functor.bamikanarie.com http://Van.Tuyl.eu/ --