Как сравнить два списка в Haskell? В Haskell, как вы можете сравнить два списка, чтобы проверить, равны ли они? Также порядок не должен иметь значения. Пример: [1,2] = [2,1] Я попробовал all (flip elem [1,2,3]) [2,1], но это возвращает true... Спасибо. Ответ 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], что может быть не тем, что вы хотите.
Ответ 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], что может быть не тем, что вы хотите.