如何比较Haskell中的两个列表?

时间:2013-03-10 05:10:24

标签: haskell

在Haskell中,您如何比较两个列表以检查它们是否相等?订单也无关紧要。

示例:

[1,2] = [2,1]

我尝试了all (flip elem [1,2,3]) [2,1],但这会返回true ...

感谢。

3 个答案:

答案 0 :(得分:14)

这样的东西?

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

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

答案 1 :(得分:8)

作为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 package

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] 

答案 2 :(得分:4)

“无订单或重复收集”的良好数据结构来自模块Data.Set

import qualified Data.Set as S

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

但是,这会将[1,1]视为等于[1],这可能不是您想要的。

相关问题