'Equations have different numbers of arguments' 在判断一棵树是否完整时
'Equations have different numbers of arguments' when deciding whether a tree is complete or not
我想用一个函数来判断二叉树是否完整,但是编译器一直告诉我 "equations have different numbers of arguments"。
我猜错误是关于语法的,但我就是找不到正确的格式。
data BinaryTree a = Leaf a | Node (BinaryTree a) a (BinaryTree a)
...
decideComplete :: BinaryTree Int -> Bool
decideComplete (Node l _ r) = (decideComplete l) && (decideComplete r)
decideComplete Leaf v = True
您 decideComplete
函数采用 BinaryTree Int
(也许您想将其概括为 BinaryTree a
)。 Leaf
不是 BinaryTree a
,它是一个带参数的数据构造函数,因此您应该添加括号,如:
decideComplete :: BinaryTree a -> Bool
decideComplete (Node l _ r) = (decideComplete l) && (decideComplete r)
decideComplete <b>(</b>Leaf v<b>)</b> = True
也就是说,您的函数将在这里为 all 树生成 True
(当然除非树有无限数量的节点,但在那种情况下它只会陷入无限循环,或者 运行 内存不足)。事实上:对于所有 Leaf
,它会 return True
,对于 Node l _ r
,它会 return True
给定 decideComplete
在 l
和 r
上,但这不可能 return False
,因为最终子树将是 Leaf
,因此该节点将是True
,因此根据归纳法,您所有的 BinaryTree
都将是 True
。
为了检查一棵二叉树是否完整,除了最后一层之外的所有层次都应该是满的。最后一层应该包含尽可能最左边的节点。
我想用一个函数来判断二叉树是否完整,但是编译器一直告诉我 "equations have different numbers of arguments"。
我猜错误是关于语法的,但我就是找不到正确的格式。
data BinaryTree a = Leaf a | Node (BinaryTree a) a (BinaryTree a)
...
decideComplete :: BinaryTree Int -> Bool
decideComplete (Node l _ r) = (decideComplete l) && (decideComplete r)
decideComplete Leaf v = True
您 decideComplete
函数采用 BinaryTree Int
(也许您想将其概括为 BinaryTree a
)。 Leaf
不是 BinaryTree a
,它是一个带参数的数据构造函数,因此您应该添加括号,如:
decideComplete :: BinaryTree a -> Bool
decideComplete (Node l _ r) = (decideComplete l) && (decideComplete r)
decideComplete <b>(</b>Leaf v<b>)</b> = True
也就是说,您的函数将在这里为 all 树生成 True
(当然除非树有无限数量的节点,但在那种情况下它只会陷入无限循环,或者 运行 内存不足)。事实上:对于所有 Leaf
,它会 return True
,对于 Node l _ r
,它会 return True
给定 decideComplete
在 l
和 r
上,但这不可能 return False
,因为最终子树将是 Leaf
,因此该节点将是True
,因此根据归纳法,您所有的 BinaryTree
都将是 True
。
为了检查一棵二叉树是否完整,除了最后一层之外的所有层次都应该是满的。最后一层应该包含尽可能最左边的节点。