2012-03-08 51 views
9

我寫的一些功能在Haskell圖的價值觀,我想檢查是否整數列表,如如何使用哈斯克爾來檢查列表包含在一個元組

[1,4, 5, 7] 

包含頂點,使邊,我已經表示爲一個元組,像這樣

(1,5) 

我試着拿一個函數,列表和元組,在這種情況下將返回true,因爲列表包含1和5.我遇到的主要問題是,我真的不知道如何在Haskell中搜索列表。他們是一個函數,它需要一個類型爲[a]的列表和一個類型爲a的值的列表,並返回一個Bool,這取決於[a]是否包含一個?

+9

[難道自己是一個類型爲\ [A \]和類型的值列表的功能,並返回一個布爾?](http://www.haskell.org/hoogle/?q =%5Ba%5D + - %3E + a + - %3E + Bool) – 2012-03-08 20:58:18

+1

他們 - >在那裏,在帖子和粘貼文本中鏈接:) – 2012-03-09 01:29:11

回答

22

還有就是要檢查一個值是否在列表的功能,

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

利用這一點,你的函數容易定義。

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

您錯過了'containsEdge'上的關閉回覆# – pat 2012-03-08 21:27:38

+7

感謝您發現它。如果你願意,你可以自己糾正這些錯別字。沒有合理的人介意他們的拼寫錯誤,所以不要害怕。 – 2012-03-08 21:33:09

5

的ELEM功能做的是:

elem 1 [1,3,4] 

會給真。雖然這個功能是通過與反引號包圍它經常被用來作爲中綴運算符:

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

在另一方面,對於大集,這不是一個很好的主意(O(n)的複雜性),並且你應該使用Set(或甚至IntSet,如果你的元素是整數)而不是列表。

+0

對不起,如果這是一個愚蠢的問題,將構成Haskell範圍內的一個大集合?我是新來的語言。 – 2012-09-20 04:07:58

+1

我沒有進行基準測試,所以我不能確定,但​​超過十年的任何東西都可能需要一個'Set',尤其是因爲它很容易構建和使用Set,所以爲什麼要使用列表的劣等備選方案呢? – Jedai 2012-10-04 08:19:28