haskell - 函数中的非穷尽模式-Haskell

标签 haskell insert binary-tree literate-programming non-exhaustive-patterns

我编写了一个函数,它将一个元素插入二叉树中,但每次我尝试运行它时,我都会得到函数中的非详尽模式。

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/

相关文章:

Haskell 程序内存不足(无限递归?循环?什么?)

haskell - 为什么 GHC 提示非详尽的模式?

mysql - 从带有 WHERE 的 SELECT 中插入 - 如果存在?

java - PrintWriter 类未按预期工作

python - 二叉树递归循环返回 None

java - 二叉搜索树的字符串表示

docker - 为Haskel Web应用程序构建Docker镜像的最佳实践是什么

haskell - 简化 Haskell 类型签名

mysql - 无法将字符串插入 MySQL 文本列

php - 通过外部脚本插入 Wordpress 帖子