<br><br><div class="gmail_quote">2009/3/15 R J <span dir="ltr">&lt;<a href="mailto:rj248842@hotmail.com">rj248842@hotmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">




<div>
<font face="Courier New">I need to write an implementation using foldl, and a separate implementation using foldr, of a function, &quot;remdups xs&quot;, that removes adjacent duplicate items from the list xs.  For example, remdups [1,2,2,3,3,3,1,1]= [1,2,3,1].<br>
<br>My approach is first to write a direct recursion, as follows:<br><br>   remdups               :: (Eq a) =&gt; [a] -&gt; [a]<br>   remdups []            =  []<br>   remdups (x : [])      =  [x]<br>   remdups (x : xx : xs) =  if x == xx then remdups (x : xs) else x : remdups (xx : xs)<br>
<br>This code works, but it has three cases, not usual two, namely [] and (x : xs).<br><br>What, if any, is the implementation using only two cases?<br><br>Also, if three cases are required, then how can it be implemented using foldr, and how using foldl?<br>
<br>Thanks.<br></font><div class="hm"></div></div></blockquote><div><br></div><div>Perhaps it would be helpful to define a helper function with this signature:</div><div><br></div><div>prepend :: (Eq a)  =&gt; a -&gt; [a] -&gt; [a]</div>
</div><div><br></div>Which for &quot;prepend x xs&quot; will put x at the front of the list, so long as the first element of the list xs is different from x. Once you have this function, take a look at the type signature for foldr.<br clear="all">
<br>-- <br>Sebastian Sylvan<br>+44(0)7857-300802<br>UIN: 44640862<br>