也許問題不是相適應的話題我要去接近如何在haskell的樹上走?
但我會盡力解釋盡我所能:
我有了這種結構的家譜:
data GT = Person Name Father Mother
| unknown
type Father = GT
type Mother = GT
type Name = String
我需要找出一個給定名稱的祖父:
祖父::名稱 - > GT - > [名]
這是最好的,我可以這樣做:
grandfathers :: Name -> GT -> [Name]
grandfathers s (Person x f m) = if (searchgrandson s f 0) then [x] else (grandfathers s f)
where
searchgrandson s unknown k = False
searchgrandson s (Person x f m) k = if s==x && k<2 then True
else searchgrandson s f (k+1)
當然,對於這棵樹它的作品,因爲我的代碼去所有的方式,通過左側,忽略了母親身邊,並只給爺爺
,而不是奶奶對嗎?
$祖父 「孫子」(人 「爺爺」(人的 「兒子」(人 「孫子」 未知的未知)未知)未知)
[ 「爺爺」]
編輯:
avos_ :: Nome -> AG -> Int
avos_ s Desconhecida = 0
avos_ s [email protected](Pessoa x p m) = encontraneto s l 0
where
encontraneto s Desconhecida k = 0
encontraneto s (Pessoa x p m) k = if s==x then k
else encontraneto s p (k+1) + encontraneto s m (k+1)
這給:
繼dfeuer意見後我是孫子所在的樹的深處,尋找雙方。之後這將是簡單的...
謝謝!
這似乎有點不清楚。你是否想要遍歷整棵樹來尋找某人的名字,然後你可以找到他們的祖父? – dfeuer 2015-02-08 00:41:07
我需要找到一個給定名字的祖父,現在,我想我可以找到一個祖父。我知道祖父總是在2級以上,這就是爲什麼我用Int 0來搜索那個級別的原因。 – skills 2015-02-08 00:45:37
我強烈建議您編寫兩個完全獨立的函數:一個用於查找樹中對應於特定名稱的節點,另一個用於查找某個節點的祖先。然後把他們兩個放在一起,找到某個名字的人的祖父。 – dfeuer 2015-02-08 00:47:47