Problem 8
Write a function to remove consecutive duplicates of list elements.
Example
noDupes [1, 1, 2, 2, 3, 3, 3, 4, 5, 4, 4, 4, 4]
== [1, 2, 3, 4, 5, 4]
Unit Test
import Html
import List
import Maybe
noDupes : List a -> List a
noDupes xs =
-- your implementation goes here
[]
main : Html.Html a
main =
Html.text
<| case test of
0 ->
"Your implementation passed all tests."
1 ->
"Your implementation failed one test."
x ->
"Your implementation failed " ++ (toString x) ++ " tests."
test : Int
test =
List.length
<| List.filter ((==) False)
[ noDupes [ 1, 1, 1, 1, 2, 5, 5, 2, 1 ] == [ 1, 2, 5, 2, 1 ]
, noDupes [ 2, 1, 1, 1 ] == [ 2, 1 ]
, noDupes [ 2, 2, 2, 1, 1, 1 ] == [ 2, 1 ]
, noDupes [ 1 ] == [ 1 ]
, noDupes [] == []
, noDupes [ "aa", "aa", "aa" ] == [ "aa" ]
, noDupes [ "aab", "b", "b", "aa" ] == [ "aab", "b", "aa" ]
]
Hints
- How would you copy a list using
foldr
? How would you modify the function passed tofoldr
only copy new values? - How would you drop the head of the list if it's a duplicate? Can you apply that recursively to solve the problem?