2009/3/15 R J
<rj248842@hotmail.com>
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.
Perhaps it would be helpful to define a helper function with this signature:
prepend :: (Eq a) => a -> [a] -> [a]