However you can say: > foldl' oplus alpha bs =(foldr f id bs) alpha where > f a g = \alpha -> g (alpha `oplus` a) > > foldr' oplus alpha bs = (foldl f id bs) alpha where > f g a = \alpha -> g (a `oplus` alpha)
And it works as long as oplus is strict in both arguments. Am 10.03.2009 um 21:54 schrieb John Dorsey:
Adrian Neumann wrote:Notice that there is no difference between foldr g a foldl f a (for appropriate g and f) if g and f are strict in both arguments.Be careful... as apfelmus noted elsewhere in this thread, that's not (ingeneral) true. Prelude> foldr (^) 2 [3,5] 847288609443 Prelude> foldl (^) 2 [3,5] 32768 The reason? Integer exponentiation (^) isn't associative and commutative. So the first is (3 ^ (5^2)) = 3^25, while the second is ((2 ^ 3) ^ 5) = 2^15. Cheers, John _______________________________________________ Beginners mailing list [email protected] http://www.haskell.org/mailman/listinfo/beginners
PGP.sig
Description: Signierter Teil der Nachricht
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
