Как я хотел бы создать функцию в 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]
я перемещаю тебя способ это делать:
eliminarRepetidosAdyacentes::[Int]->[Int]
eliminarRepetidosAdyacentes [] = []
eliminarRepetidosAdyacentes [x] = [x]
eliminarRepetidosAdyacentes (x:xs)
| x == head xs = eliminarRepetidosAdyacentes xs
| otherwise = x:eliminarRepetidosAdyacentes xs;
Функционирует так:
Прибывает в последний элемент списка (базовый случай), когда он возвращается назад, из-за которого я заканчиваю recursion, вопрос, если предыдущий равен тому, который возвращается.
В положительном случае это не добавляет, если они различные если.
Надеялся, что он подал тебя.
Объятие.