在元组列表中获取元组的第一个元素

时间:2013-12-17 23:44:15

标签: haskell graph

我目前正在使用Haskell中的图形,其中图形是元组列表:

type Graph = [(Node, Node)]

我需要列出图中包含的所有节点,我的想法是获取每个元组的第一个元素,然后用rmdup删除重复项。我真的被困在这里,任何帮助将不胜感激。

2 个答案:

答案 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) -> aSearching我们到fst

将所有内容放置到位:map fst list。然后,要删除重复项,请使用相同的搜索方法并转到nub