[Haskell-cafe] Most elegant funciton for removing adjacent duplicates from a list using foldl and foldr

R J rj248842 at hotmail.com
Sun Mar 15 08:21:14 EDT 2009


I need to write an implementation using foldl, and a separate implementation using foldr, of a function, "remdups xs", that removes adjacent duplicate items from the list xs.  For example, remdups [1,2,2,3,3,3,1,1]= [1,2,3,1].

My approach is first to write a direct recursion, as follows:

   remdups               :: (Eq a) => [a] -> [a]
   remdups []            =  []
   remdups (x : [])      =  [x]
   remdups (x : xx : xs) =  if x == xx then remdups (x : xs) else x : remdups (xx : xs)

This code works, but it has three cases, not usual two, namely [] and (x : xs).

What, if any, is the implementation using only two cases?

Also, if three cases are required, then how can it be implemented using foldr, and how using foldl?

Thanks.

_________________________________________________________________
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090315/b492b96f/attachment.htm


More information about the Haskell-Cafe mailing list