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]]类型,我该怎么办? 多谢!

你用not是对的,但你可能用错了。not应该在组合中使用传递给filter的现有函数:

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

或者通过使用de Morgan Laws

filter (all (`notElem` b)) a

最新更新