【发布时间】:2020-03-14 06:13:39
【问题描述】:
我正在尝试编写一个树满足 BST 属性的验证算法,并且正在询问我的代码中的错误。
data Tree x = Leaf x | Node x (Tree x) (Tree x)
deriving (Show)
window :: Int -> Int -> Int -> Bool
window min max x = min <= x && x <= max
bstHelper :: Int -> Int -> Tree Int -> Bool
bstHelper min max (Leaf x) = window min max x
bstHelper min max (Node x t1 t2) = (window min max x) && (bstHelper min x t1) && (bstHelper x max t1)
x1 = bstHelper 3 6 (Node 5 (Leaf 3) (Leaf 6))
x2 = (window 3 6 5) && (bstHelper 3 5 (Leaf 3)) && (bstHelper 5 6 (Leaf 6))
wrong = x1 == x2
为什么错是假的?
你会如何亲自调试这个?
【问题讨论】:
-
您在第二次递归调用中使用了
t1,而不是t2,作为bstHelper的最后一个参数。 -
启用警告,它会报告未使用的
t2。强烈推荐。 -
使用
-Wall编译可能会有所帮助。 GHC 编译器可以检查一定数量的东西,并且经常会警告您代码中的“奇怪”元素。
标签: algorithm haskell binary-search-tree