我有两个列表;一个是我想从另一个列表中排除的列表, 就像这个
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]]
类型,我该怎么办? 多谢!
你用not
是对的,但你可能用错了。not
应该在组合中使用传递给filter
的现有函数:
filter (not . (any (`elem` b))) a
或者通过使用de Morgan Laws
:
filter (all (`notElem` b)) a