如何删除不满足某个条件的列表元素?

时间:2015-12-09 11:37:06

标签: list haskell filter

我正在尝试在haskell中形式化路由描述以进行空间推理模拟。在这个过程中,我需要一个函数来删除列表中的一些元素,这些元素不满足条件:

 [(["Keyhan","ave."],["Keyhan4","alley"]),(["13","number"],["Keyhan","ave."]),(["13","number"],["Keyhan4","alley"])]

我希望此列表中包含"number"的所有对以及除"number""alley"之外的所有内容都将从列表中删除。例如,所需的答案是:

[(["Keyhan","ave."],["Keyhan4","alley"]),(["13","number"],["Keyhan4","alley"])]

表示已删除包含"ave.""number" (["13","number"],["Keyhan","ave."])的对。

我很困惑,我真的不知道如何编写这个功能。确切地说,我不知道如何使病情正规化。我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我能从你的描述中得到的唯一答案是

condition (x,y) = let xy = if any (== "number") x
                             then any (`elem` ["number","alley"]) y
                             else True
                      yx = if any (== "number") y
                             then any (`elem` ["number","alley"]) x
                             else True
                   in xy && yx

它很脏并且可以很容易地重构,但我现在没时间漂亮