如何测量Haskell中多棵树的大小?
我对Haskell很陌生,因此对它不太熟悉 以下方法用于测量如何测量Haskell中多棵树的大小?,haskell,recursion,tree,algebraic-data-types,non-exhaustive-patterns,Haskell,Recursion,Tree,Algebraic Data Types,Non Exhaustive Patterns,我对Haskell很陌生,因此对它不太熟悉 以下方法用于测量MultTree的大小 MultTree包括Index节点,这些节点包含两个Int,可以有任意数量的子节点。然后还有Data节点,它们包含一个Int,并且可以没有子节点。因此,该方法应该确定的是,最长的“分支”有多长 我目前的做法是: data MultTree a = Index a a [MultTree a] | Data a deriving Show size :: MultTree a -> Int size (In
MultTree
的大小
MultTree
包括Index
节点,这些节点包含两个Int
,可以有任意数量的子节点。然后还有Data
节点,它们包含一个Int
,并且可以没有子节点。因此,该方法应该确定的是,最长的“分支”有多长
我目前的做法是:
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
它确实可以编译,但当尝试使用它时,我得到了“函数大小中的非穷举模式”
。即使我不会犯那个错误,我知道它也不会按照我希望的方式工作
但不知怎的,我想不出解决这个问题的办法
我会感激你的帮助
已经提前谢谢你了 你写:
“因此,该方法应该确定的是,最长的‘分支’有多长。”
它不是“大小”,通常称为“深度”:
那么我们有什么a
是值,存在于索引
分支节点或数据
叶节点中:
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
你写道:
“因此,该方法应该确定的是,最长的‘分支’有多长。”
它不是“大小”,通常称为“深度”:
那么我们有什么a
是值,存在于索引
分支节点或数据
叶节点中:
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