2012-12-20 46 views
4

我試圖讓兩個列表相交的「相反」:像 :哈斯克爾相反(列表)

let all = [1..5] 
let mask = [2,3] 
let res = ??? 
-- let res = all `intersect` mask <-- reverse/opposite ? 
-- I want to get [1,4,5] ? 
+0

我認爲這就是所謂的相對補充。 – Pubby

回答

14

您正在尋找差集,這是\\來自Data.List的運營商:

Prelude> import Data.List ((\\)) 
Prelude Data.List> let all = [1..5] 
Prelude Data.List> let mask = [2,3] 
Prelude Data.List> all \\ mask 
[1,4,5] 
+0

O哇只是我想要什麼:)謝謝你! – user914584

+3

@ user914584但是請注意,「(\\)」僅從第二個列表的每個元素中刪除第一個列表中的一個元素,例如, '[1,2,3,2] \\ [2] = [1,3,2]'。如果這對你的用例不好,''filter('notElem' second)first''是另一種選擇。 –