On Wed, 17 Jun 2009 13:32:40 +0200, Yitzchak Gale <g...@sefer.org> wrote:

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/
--


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

Reply via email to