foldr oddity

Frodo Chao frodogreat at gmail.com
Wed Oct 12 04:45:04 CEST 2011


Hi,

I came upon this when playing with foldr and filter. Compare the two
definitions:

testr  n = foldr (\x y -> x && y) True [t | (_, t) <- zip [1 .. n] [True,
True ..]]
testr' n = foldr (\x y -> y && x) True [t | (_, t) <- zip [1 .. n] [True,
True ..]]

I tried these functions on ghci (The Glorious Glasgow Haskell Compilation
System, version 7.0.3), and get the following results (with :set +s):

testr 1000000 => True
(0.01 secs, 7920832 bytes)
testr' 1000000 => True
(8.72 secs, 446585344 bytes)

This bizarre (at least to me) behavior also applies to ||. Should I mind the
orderings of the parameters (especially the accumulator) in the function
passed to foldr?

Thak you for reading.

Sincerely yours,
Frodo Chao
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20111012/ccff1ab7/attachment.htm>


More information about the Glasgow-haskell-users mailing list