2017-08-24 59 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