
That's why I said "for appropriate g and f". But I see that my wording was misleading. 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 (in general) 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 Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners