我编写了一个函数,它将一个元素插入二叉树中,但每次我尝试运行它时,我都会得到函数中的非详尽模式。
type Eintrag = (Person, Anschrift, SozNr)
data Tree = Nil | Node Eintrag Tree Tree deriving (Eq, Show)
singleton :: Eintrag -> Tree
singleton x = Node x Nil Nil
genTree :: Eintrag -> Tree-> Tree
genTree x (Node e l r)= if ((Node e l r)==Nil)
then (singleton x)
else if (soznr x) < (soznr e )
then (Node e (genTree x l) r)
else if (soznr x) > (soznr e )
then (Node e l (genTree x r))
else (Node e l r)
你能给我一些提示吗? 谢谢
最佳答案
您还没有包含当您插入的树为 Nil
时会发生什么的定义,大概看起来像
genTree x Nil = singleton x
您尝试使用该行执行此操作
genTree x (Node e l r) = if (Node e l r == Nil)
then singleton x
else ...
但是如果你仔细想想,你就会发现这是行不通的。模式匹配确保您正在查看的树的形式为Node _ _ _
,因此它永远不会Nil
。也就是说,if
表达式中的测试的计算结果始终为 False
。
关于haskell - 函数中的非穷尽模式-Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940024/