如何在Haskell中测量MultTree的大小



我对Haskell很陌生,因此对它不是很熟悉

以下方法用于测量MultTree的大小。

MultTree包括包含两个IntIndex节点,并且可以具有任意数量的子节点。然后还有包含一个Int并且不能有子节点的Data节点。因此,该方法应该确定的是,最长的"分支"有多长

到目前为止我的方法:

data MultTree a = Index a a [MultTree a] | Data a deriving Show
size :: MultTree a -> Int
size (Index a b []) = 1
size (Index a b [Index c d [e]]) = size (Index c d [e]) + 1

它确实可以编译,但当尝试使用它时,我得到了"non-exhaustive patterns in function size"。即使我不会犯那个错误,我也知道它不会按照我想要的方式工作。

但不知怎么的,我想不出解决这个问题的办法。

我将感谢您的一切帮助。

提前感谢您!

您编写:

"因此,该方法应该确定的是,最长的"分支"有多长;

它不是"尺寸";,它通常被称为";深度":

depth :: MultTree a -> Int

那么我们有什么?a是值,存在于Index分支节点或Data叶节点中:

data MultTree a = Index a a [MultTree a] 
| Data a 
deriving Show
depth (Data a)          = 0   -- or 1, whatever you prefer
depth (Index _ _ trees) = 

好吧,我们对这些值本身没有用处,至于树,如果我们能找到它们中每一个的深度,那么我们就可以用找到最大值

let max_depth = maximum [ find_depth t | t <- trees ]
in
max_depth + 1

现在开始编写find_depth函数。它想要的类型是find_depth :: MultTree a -> Int,这取决于我们使用它的方式。嗯,

(其余故意留空)




哦,错误的原因是,[e]作为一种类型代表">CCD_ 14类型值的列表;;但是作为模式一个值的单例列表"——并且当该列表中存在不止一个值时,这种情况不被覆盖;非穷举模式";错误,即需要更多的模式来覆盖这些情况,但它们缺失了。

类似地,[Index c d [e]]作为模式代表";MultTree a类型的一个的单例列表,其与模式Index c d [e]匹配,其中cd都是a类型值,并且[e]是由MultTree a类型确定的类型的一值的单例名单,即MultTree a:

data MultTree a = Index a a [MultTree a] 
| ...

相关内容

  • 没有找到相关文章

最新更新