我正在尝试在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."])
的对。
我很困惑,我真的不知道如何编写这个功能。确切地说,我不知道如何使病情正规化。我真的很感谢你的帮助!
答案 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
它很脏并且可以很容易地重构,但我现在没时间漂亮