This doesn't seem to make a difference, eithr (I just tried it). - Hal -- Hal Daume III "Computer science is no more about computers | hdaume@isi.edu than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume On Fri, 8 Feb 2002, Konst Sushenko wrote:
Did you try strict +/-? In (,). I am just curious.
-----Original Message----- From: Hal Daume III [mailto:hdaume@ISI.EDU] Sent: Friday, February 08, 2002 3:53 PM To: Konst Sushenko Cc: Jorge Adriano; haskell@haskell.org Subject: RE: efficiency question
I've tried using a strict fold:
foldl' f a [] = a foldl' f a (x:xs) = (foldl' f $! f a x) xs
but that has no effect (or minimal effect).
-- Hal Daume III
"Computer science is no more about computers | hdaume@isi.edu than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume
On Fri, 8 Feb 2002, Konst Sushenko wrote:
On Friday 08 February 2002 22:14, you wrote:
define
test1 l = let s1 = foldr (+) 1 l s2 = foldr (-) 1 l in (s1, s2)
test2 l = let s = foldr (\x (a,b) -> (x+a,x-b)) (1,1) l in s
why is test1 so much faster than test2 for long lists l (eg [1..1000000])? replacing foldr with foldl makes it faster (of course), but test2 is still much slower.
i *expected* test2 to be much faster because you're only traversing the list once. presumably the two elements "a" and "b" in test2 could be put in registers and i'd imagine test2 should be faster (it certainly would be if written in c).
I'd say that's because in the second case you also got to apply the (,), besides the (+)/(-) constructor during the transversing... Am I right?
J.A.
My guess is that it is due to the laziness of the addition/subtraction in (,) _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell
_______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell