也许问题不是相适应的话题我要去接近如何在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