Re: [Haskell-beginners] folds -- help!

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

Adrian,
That's why I said "for appropriate g and f". But I see that my wording was misleading.
Thanks for following up! I had thought you were arguing that foldl and foldr were easily and intuitively interchangeable; they're surely not so for beginners. Now I think you're arguing that given strict oplus, each can be generally expressed in terms of the other, allowing for different space/time complexity. Thanks for clarifying. I should have paid more attention to your "appropriate g and f" qualifier. Cheers, John
participants (2)
-
Adrian Neumann
-
John Dorsey