Удалить смежные дубликаты из списка в HASKELL

Как я хотел бы создать функцию в Haskell, которая позволила бы мне удалять целые смежные дубликаты из списка. Правда состоит в том, что мне удалось сделать это для дубликатов во всем списке, и даже тогда у меня всегда есть последняя цифра, если она появляется:

    elimDups :: [Int] -> [Int]

    elimDups [] = []
    elimDups [_] = []

    elimDups (x:y:xs) = if x == y then elimDups(y:xs) else [x] ++ elimDups(y:xs)

Использовано, это выглядит так:

elimDups [1,2,2,3,3,3,1,1]
[1,2,3]

Что я хочу получить это:

elimDups[1,2,2,3,3,3,1,1]
[1,2,3,1]

1
задан 24.11.2019, 21:32
1 ответ

я перемещаю тебя способ это делать:

eliminarRepetidosAdyacentes::[Int]->[Int]
eliminarRepetidosAdyacentes [] = []
eliminarRepetidosAdyacentes [x] = [x]
eliminarRepetidosAdyacentes (x:xs)
    | x == head xs  = eliminarRepetidosAdyacentes xs
    | otherwise = x:eliminarRepetidosAdyacentes xs;

Функционирует так:

Прибывает в последний элемент списка (базовый случай), когда он возвращается назад, из-за которого я заканчиваю recursion, вопрос, если предыдущий равен тому, который возвращается.

В положительном случае это не добавляет, если они различные если.

Надеялся, что он подал тебя.

Объятие.

0
ответ дан 01.12.2019, 10:52

Теги

Похожие вопросы