Ответ 1
Что-то вроде этого?
import Data.List (sort)
areEqual a b = sort a == sort b
OUTPUT:
*Main> areEqual [1,2] [2,1]
True
В Haskell, как вы можете сравнить два списка, чтобы проверить, равны ли они? Также порядок не должен иметь значения.
Пример:
[1,2] = [2,1]
Я попробовал all (flip elem [1,2,3]) [2,1]
, но это возвращает true
...
Спасибо.
Что-то вроде этого?
import Data.List (sort)
areEqual a b = sort a == sort b
OUTPUT:
*Main> areEqual [1,2] [2,1]
True
Как 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]
Хорошая структура данных для "коллекции без порядка или повторений" - из модуля Data.Set
:
import qualified Data.Set as S
sameElems xs ys = S.fromList xs == S.fromList ys
Это, однако, считает [1,1]
равным [1]
, что может быть не тем, что вы хотите.