foldl and foldr are defined as follows:
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f e [] = e
foldr f e (x : xs) = f x (foldr f e xs)
foldl :: (b -> a -> b) -> b -> [a] -> b
foldl f e [] = e
foldl f e (x : xs) = foldl f (f e x) xs
1. I understand how these definitions work, and yet I'm unable to implement
foldl in terms of foldr. What's a systematic approach to identifying such an
implementation, and what is the implementation?
2. I believe that the reverse implementation--namely, implementing foldr in
terms of foldl--is impossible. What's the proof of that?
3. Any advice on how, aside from tons of practice, to develop the intuition
for rapidly seeing solutions to questions like these would be much appreciated.
The difficulty a newbie faces in answering seemingly simple questions like
these is quite discouraging.
_________________________________________________________________
Express your personality in color! Preview and select themes for HotmailĀ®.
http://www.windowslive-hotmail.com/LearnMore/personalize.aspx?ocid=TXT_MSGTX_WL_HM_express_032009#colortheme
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe