練習問題 4.5.5
remdupsはリストから隣接する重複を取り除く関数である.たとえば,
remdups [1,2,2,3,3,3,1,1] = [1,2,3,1]である.
remdupsを
foldrを使って定義せよ.また,
foldlを使っても定義してみよ.
remdup :: Eq a => [a] -> [a]
remdup = foldr f []
where f x [] = [x]
f x yys@(y:_) | x == y = yys
| otherwise = x:yys
remdup' :: Eq a => [a] -> [a]
remdup' = reverse . foldl g []
where g [] z = [z]
g yys@(y:_) z | y == z = yys
| otherwise = z:yys