Haskell — получить элементы, которые встречаются только один раз

Я пытаюсь понять, как создать новый список, содержащий только элементы, которые встречаются только один раз. Я тоже не могу использовать рекурсию.

Это маленькая часть большой функции. Я пытаюсь написать функцию для получения пересечения двух наборов. В основном я комбинировал наборы. Затем отсортировано. Затем я хочу объединить это с набором B и избавиться от всех дубликатов в этом наборе. Если кто-то не знает более простого способа.

Я могу использовать функции высокого порядка, но не могу использовать рекурсию.

Спасибо

Изменить: Пример:

[1,2,3,3,4,4,5,5] Должно получиться как [1,2]


person Matt    schedule 28.09.2010    source источник


Ответы (4)


Этот вопрос уже задавался раньше, и, по сути, вы просто хотите сгруппировать их вместе, подсчитав количество элементов, а затем извлекая только те, у которых количество элементов равно единице. (вероятно, используя ' фильтр')

См. Подсчет уникальных элементов в списке

person Robert Massaioli    schedule 28.09.2010
comment
Вопрос помечен как домашнее задание, поэтому он, вероятно, хочет, чтобы подсказки были больше, чем кто-то, кто решит его за него. - person Daenyth; 28.09.2010
comment
ты гений, если я могу использовать группу. - person Matt; 28.09.2010
comment
@Daenyth Да, но первая часть домашней работы — это исследование. Я хотел показать, что, возможно, еще немного времени на поиски привели бы к ответу. - person Robert Massaioli; 28.09.2010
comment
@ Мэтт, надеюсь, ты сможешь, и тогда, надеюсь, это поможет; еще лучше, если вы понимаете, почему это работает, тогда этого достаточно для меня. - person Robert Massaioli; 28.09.2010
comment
Я искал здесь, но ничего не нашел, так как не хотел считать уникальные элементы, а просто собирал те, у которых не было дубликатов. Но я даже не знал о групповой функции. Я придумал способ сделать то, что мне нужно, с группой, просто нужно посмотреть, смогу ли я использовать его сейчас. - person Matt; 28.09.2010

Надеюсь, этот намек достаточно расплывчатый. :)

Подумайте о группировании повторяющихся элементов вместе.

person dino    schedule 28.09.2010
comment
Я знаю, как заархивировать, а затем избавиться от дубликатов. Но мне нужны только элементы, которые встречаются только один раз. Отредактировал мой вопрос с примером. - person Matt; 28.09.2010
comment
Как вы думаете, было бы лучше, если бы теперь соседние элементы сами были в меньших внутренних списках? - person dino; 28.09.2010
comment
О, я вижу, мне не нравится пытаться помочь ОП найти ответ самостоятельно. бах - person dino; 28.09.2010
comment
Спасибо за попытку помочь, но я бы все равно сидел и чесал затылок. Я не знал о групповой функции в Haskell. - person Matt; 29.09.2010

Подумайте, какую структуру данных вы бы использовали, чтобы отслеживать, сколько раз появляется каждая вещь.

person Daenyth    schedule 28.09.2010

Как насчет:

concat $ filter (null . tail) $ group [1,2,3,3,4,4,5,5]
person stusmith    schedule 19.10.2010