【发布时间】:2015-01-22 15:52:32
【问题描述】:
我想找到STree 的深度,但在我的代码中它不会计算第一级。
data STree = SNode Label [STree] deriving (Eq,Show)
tdepth :: STree -> Label
tdepth (SNode _ [])= 0
tdepth (SNode l s) = 1 + naiveSumList([tdepth t | t <- s])
naiveSumList :: [Int] -> Label
naiveSumList (x:xs) = x + (naiveSumList xs)
naiveSumList [] = 0
tdepth SNode _ [] 必须给出 1 但我如何计算级别?这是我一直在测试的STrees:
s1 = SNode 1 []
s2 = SNode 1 [
SNode 2 [],
SNode 3 []
]
s3 = SNode 1 [
SNode 2 [
SNode 4 [],
SNode 5 [],
SNode 6 []
],
SNode 3 []
]
s4 = SNode 1 [
SNode 2 [
SNode 4 [],
SNode 5 [
SNode 7 []
],
SNode 6 []
],
SNode 3 []
]
我的代码示例结果:
tdepth s1 = 0
tdepth s2 = 1
tdepth s3 = 2
tdepth s4 = 3
结果应该是:
tdepth s1 = 1
tdepth s2 = 2
tdepth s3 = 3
tdepth s4 = 4
【问题讨论】:
-
请改写您的问题。目前尚不清楚,您指的是哪个代码,您在问题中有两种不同的
tdepth实现。 -
好的,我删除了另一个
-
如果你想找到你的树的深度,你为什么要总结每个子分支的深度?您不应该选择该列表中的
maximum吗?另外,当sum已经存在于Prelude中时,为什么还要使用naiveSumList? -
@bheklilr 因为我是 Haskell 的新手,我也不知道序曲。树真的很复杂