我目前正在使用Haskell中的图形,其中图形是元组列表:
type Graph = [(Node, Node)]
我需要列出图中包含的所有节点,我的想法是获取每个元组的第一个元素,然后用rmdup删除重复项。我真的被困在这里,任何帮助将不胜感激。
答案 0 :(得分:3)
如果变量x中有图表,请使用
nub $ (map fst x) ++ (map snd x)
map fst x
获取元组的第一个元素中的所有节点,类似于snd
。 (++)
将它们整合在一起,并且nub删除重复项。
答案 1 :(得分:2)
当你有一个t
类型的元素列表(即[t]
)来对列表的每个元素应用一个函数(比如签名t -> b
)你需要使用map
:
现在,转到Hoogle并将各个部分组合在一起我们有:
[(Node, Node)]
类型的列表,让我们说[(a, a)]
[a]
。[t1]
到类型[t2]
。 Searching我们到map :: (t1 -> t2) -> [t1] -> [t2]
map
中的功能。如果我们在t1 = (a, a)
之后得到t2 = a
,那么我们需要一个函数(a, a) -> a
。 Searching我们到fst
将所有内容放置到位:map fst list
。然后,要删除重复项,请使用相同的搜索方法并转到nub
。