我目前在Haskell中,其中一個圖是一個元組列表圖形工作的列表:獲取一個元組的第一個元素,在元組
type Graph = [(Node, Node)]
,我需要做一個列表中包含的所有節點,我的想法是採取每個元組的第一個元素,然後刪除與rmdup重複。我真的被困在這裏,任何幫助將不勝感激。
我目前在Haskell中,其中一個圖是一個元組列表圖形工作的列表:獲取一個元組的第一個元素,在元組
type Graph = [(Node, Node)]
,我需要做一個列表中包含的所有節點,我的想法是採取每個元組的第一個元素,然後刪除與rmdup重複。我真的被困在這裏,任何幫助將不勝感激。
如果您有變量x的圖形,使用
nub $ (map fst x) ++ (map snd x)
map fst x
得到所有節點的元組的第一個元素,用snd
相似。 (++)
將它們連接在一起,並且nub刪除重複項。
當你有t
類型(即[t]
)的元素的列表,以在列表中的每個元素應用功能(簽字t -> b
說),你需要使用map
:
現在,轉向Hoogle及配件拼在一起,我們有:
[(Node, Node)]
類型的列表,讓我們說[(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
。
你看,他不需要元組的第二個元素:) –
@ MihaiMaruseac-我不清楚....他說「所有節點」。是否因爲對於處理圖的人來說顯而易見的是,任何(a,b)鏈接都需要相應的(b,a)鏈接? – jamshidh
「我的想法是採取每個元組的第一個元素,然後刪除與rmdup重複。」 –