2017-08-24 57 views
-2

我有两个列表;一个是名单我想从对方列表中排除, 正是这样一个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]]类型,我该怎么办? 非常感谢!

+0

您应该包括这将导致错误代码和错误本身。 – user2407038

+0

你在文本中提到'list1',但不在代码中。请更正错字。 – LudvigH

回答

3

您对使用not是正确的,但您可能会错误地使用它。 not应组成被用来传递给filter现有的功能:

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

或使用de Morgan Laws

filter (all (`notElem` b)) a