您好我是Haskell的新手,并尝试编写一个函数来检查树是否是二叉搜索树。
以下是我的代码: -
data Tree = Node Int Tree Tree
| Leaf Int
deriving (Eq,Show)
val :: Tree -> Int
val (Leaf i) = i
isBst :: Tree -> Bool
isBst (Leaf i) = True
isBst (Node x l r) = if (x > (val l )) && (x < (val r)) then True else False
但是当我执行它时,我收到以下错误。
<interactive>:10:1: Not in scope: ‘isBST’
任何人都可以帮我解决这个问题,或者帮我写一个方法determine if a tree is bst or not using haskell
。
您还可以帮助make this code exhaustive
吗?
答案 0 :(得分:4)
您当前的问题是您将功能命名为isBst
(小写s
和t
),但尝试将其用作isBST
(使用大写{ {1}}和S
)。
除此之外,您的T
函数并非详尽无遗,并且在使用val
作为参数调用时会导致异常。您需要添加一个接受Node
的案例并返回其值。
此外,您的Node
函数将只查看树的根,即如果根的值介于其子树的值之间,它将返回isBst
,而不关心是否使用子树他们自己排序。为了正常工作,它应该在子树上递归调用自己。
如果节点的值与其中一个子树的值相同,则您的函数也将返回True
。如果树的构造方式永远不会包含重复,则无关紧要,但这应该是固定的。