2014-10-27 3 views
-1

Не могу понять, как удалить все дубликаты из списка кортежей например [(1,2), (2,1), (5,2), (5,6)]Удаление дубликатов кортежей в списке в Haskell

Здесь дубликат будет (2,1) (не имеет значения для порядка). Я только хочу удалить один из дубликатов, как бы я это сделал?

symEq :: Eq a => (a,a) -> (a,a) -> Bool 
symEq (x,y) (u,v) = (x == u && y == v) || (x == v && y == u) 

removeDuplTuples :: Eq a => [(a,a)] -> [(a,a)] 
removeDuplTuples = nubBy symEq 

Вот код, я читал, но я не думаю, что это полностью соответствующая

+0

В этом случае я хочу (2,1) быть дубликатом – Sprout

+3

вы пробовали запустить этот код? – genisage

+0

Да, он возвращает ошибку: nubBy - неопределенная переменная – Sprout

ответ

5

Код Размещенное Вами полностью актуальна, это именно то, что вы хотите ...

Позволяет шаг через него:

symEq принимает два кортежа и проверяет, равны ли первый и последний элементы или если элементы друг напротив друга равны.

nubBy только nub с использованием пользовательской функции вместо (==).

nubBy в пакете Data.List, просто введите import Data.List в начале файла для его использования.

+0

Я пробовал это сделать, но есть ошибка с импортом по какой-то причине – Sprout

+0

@Sprout Попробуйте сделать '' import Data.List (nubBy) '' – ThreeFx