从两个列表

时间:2016-11-04 22:46:33

标签: list haskell

我正在尝试创建一个函数,给定两个列表,从两个列表中删除它们在commen中的元素。我一直在打破我的头脑,但我无法找到一个合适的解决方案。

例如,给定:

` let a = [1,2,3,4,5] `
` let b = [1,3,5,7,9] `
` f a b `

然后f应返回类似的内容:

` ( [2,4], [7,9] ) `

1 个答案:

答案 0 :(得分:1)

您可以使用谓词not.flip (elem)过滤列表:

f :: Eq a => [a] -> [a] -> ([a],[a])
f a b = (filter (not.flip (elem) b) a,filter (not.flip(elem) a) b)

如果我们导入Data.Foldable,我们可以使用nonElem进一步简化此操作:

f a b = (filter (`notElem` b) a,filter (`notElem` a) b)