首页 文章

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

提问于
浏览
11

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

[1,4, 5, 7]

包含构成边的顶点,我将其表示为元组,就像这样

(1,5)

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

2 回答

  • 6

    elem函数做到了:

    elem 1 [1,3,4]
    

    会给予真实 . 虽然这个函数通常用反引号作为中缀运算符:

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

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

  • 25

    有一个函数来检查值是否在列表中,

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

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

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

相关问题