我如何使用haskell检查列表是否包含元组中的值

时间:2012-03-08 20:44:40

标签: haskell

我正在为Haskell中的图形编写一些函数,我想检查是否有整数列表,例如

[1,4, 5, 7]

包含构成边的顶点,我将其表示为元组,如此

(1,5)

我试图采取一个带有列表和元组的函数,在这种情况下将返回true,因为列表包含1和5.我遇到的主要问题是我真的不知道如何搜索Haskell中的列表。它们是一个函数,它接受类型[a]的列表和类型a的值,并返回一个Bool,具体取决于[a]是否包含?

2 个答案:

答案 0 :(得分:29)

有一个功能可以检查值是否在列表中,

elem :: Eq a => a -> [a] -> Bool

使用它,您的功能很容易定义。

containsEdge :: [Int] -> (Int,Int) -> Bool
xs `containsEdge` (a,b) = (a `elem` xs) && (b `elem` xs)

答案 1 :(得分:6)

elem函数可以做到:

elem 1 [1,3,4]

将给予True。虽然这个函数经常被作为一个中缀运算符用于用反引号包围它:

1 `elem` [1,4,5,7]

另一方面,对于大集合,这不是一个非常好的想法(O(n)复杂度),你应该使用Set(如果你的元素是整数,甚至是IntSet)而不是列表。