Подтвердить что ты не робот

Как сравнить два списка в Haskell?

В Haskell, как вы можете сравнить два списка, чтобы проверить, равны ли они? Также порядок не должен иметь значения.

Пример:

[1,2] = [2,1]

Я попробовал all (flip elem [1,2,3]) [2,1], но это возвращает true...

Спасибо.

4b9b3361

Ответ 1

Что-то вроде этого?

import Data.List (sort)
areEqual a b = sort a == sort b

OUTPUT:
*Main> areEqual [1,2] [2,1]
True

Ответ 2

Как Eq a => Eq [a] (http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Data-Eq.html)

вам НЕ нужен дополнительный код для сравнения списков для равенства.

[1,2] == [2,1]

Если вы хотите сравнить списки в виде мешков, тогда сумка представляет собой MultiSet, поэтому найдите пакет Multiset

import "multiset" Data.MultiSet as M

-- or

import "multiset" Data.IntMultiSet as M   -- if you deal with Ints 

M.fromList [1,2] == M.fromList [2,1] 

Ответ 3

Хорошая структура данных для "коллекции без порядка или повторений" - из модуля Data.Set:

import qualified Data.Set as S

sameElems xs ys = S.fromList xs == S.fromList ys

Это, однако, считает [1,1] равным [1], что может быть не тем, что вы хотите.