我有两个清单;一个是我要从其他列表中排除的列表, 就像这个一样
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]]
类型,我该怎么办?
非常感谢!
答案 0 :(得分:3)
您使用not
是对的,但您可能会错误地使用它。 not
应该在合成中用于传递给filter
的现有函数:
filter (not . (any (`elem` b))) a
或者使用de Morgan Laws
:
filter (all (`notElem` b)) a