我正在为Haskell中的图形编写一些函数,我想检查是否有整数列表,例如
[1,4, 5, 7]
包含构成边的顶点,我将其表示为元组,如此
(1,5)
我试图采取一个带有列表和元组的函数,在这种情况下将返回true,因为列表包含1和5.我遇到的主要问题是我真的不知道如何搜索Haskell中的列表。它们是一个函数,它接受类型[a]的列表和类型a的值,并返回一个Bool,具体取决于[a]是否包含?
答案 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)而不是列表。