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

Ben*_*313 14 haskell

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

[1,4, 5, 7]
Run Code Online (Sandbox Code Playgroud)

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

(1,5)
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*her 31

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

elem :: Eq a => a -> [a] -> Bool
Run Code Online (Sandbox Code Playgroud)

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

containsEdge :: [Int] -> (Int,Int) -> Bool
xs `containsEdge` (a,b) = (a `elem` xs) && (b `elem` xs)
Run Code Online (Sandbox Code Playgroud)

  • 感谢您发现它.如果你愿意,你可以自己纠正这样的拼写错误.没有理智的人会介意他们的拼写错误,所以不要害怕. (8认同)

Jed*_*dai 7

elem函数做到了:

elem 1 [1,3,4]
Run Code Online (Sandbox Code Playgroud)

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

1 `elem` [1,4,5,7]
Run Code Online (Sandbox Code Playgroud)

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