Хаскель newb здесь
Я работаю над этой проблемой в haskell:
(**) Eliminate consecutive duplicates of list elements.
If a list contains repeated elements they should be replaced with a single copy of the element. The order of the elements should not be changed.
Example:
* (compress '(a a a a b c c a a d e e e e))
(A B C A D E)
Решение (которое мне пришлось искать) использует foldr:
compress' :: (Eq a) => [a] -> [a]
compress' xs = foldr (\x acc -> if x == (head acc) then acc else x:acc) [last xs] xs
Этот сгиб, согласно решению, принимает два параметра, х и в соотв. Казалось бы, все складки принимают эти параметры; есть ли исключения из этого? Как складка, которая занимает 3 или более? Если нет, является ли это соглашение избыточным и может ли формула быть написана с меньшим количеством кода?