2012-12-20 38 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''是另一种选择。 –