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

Reply via email to