Haskell节目我应该根据其他List排除列表吗?

时间:2017-08-24 04:25:38

标签: list haskell

我有两个清单;一个是我要从其他列表中排除的列表, 就像这个一样

a::[String]
a = [["A1","B2","C5"],["A3","B1","C2"]]

我还有另一个列表要排除包含a

中三个元素之一的每个元素
b :: [[String]] 
b = [["A1","B1","H5"],["A3","C2","B1"],["A1","B2","H5"],["H2","H3","B2"],["H5","B1","H4"]]

预期结果将是:

[["H5","B1","H4"]]

这是我的方法:

excludeList ::[[String]]-> [[String]] -> [[String]]
excludeList a b = filter (any (`elem` b)) a

我知道上面的代码会保留包含list1中任何元素的元素,但我不知道如何使用not以相反的方式执行此操作?但无论我放在哪里,我的IDE总是给我一个错误。我该如何解决?似乎elem无法处理[[String]]类型,我该怎么办? 非常感谢!

1 个答案:

答案 0 :(得分:3)

您使用not是对的,但您可能会错误地使用它。 not应该在合成中用于传递给filter的现有函数:

filter (not . (any (`elem` b))) a

或者使用de Morgan Laws

filter (all (`notElem` b)) a