Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测量Haskell中多棵树的大小?_Haskell_Recursion_Tree_Algebraic Data Types_Non Exhaustive Patterns - Fatal编程技术网

如何测量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

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

以下方法用于测量
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