作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个树满足 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
最佳答案
修复代码的解决方案在问题下方的评论中,使用 t2
在最后一部分:(bstHelper max x t2)
.如果你用 -Wall
编译它可能会告诉您有一个未使用的参数 t2
.如果你在 Haskell 中命名一个值并且不使用它,编译器会报错。如果你想命名一个值而不使用它,那么你应该在名称前加上 _
.
最后,关于如何在 Haskell 中进行调试的一些技巧。如果它正在编译并且没有警告,请将其加载到 GHCi 和 bstHelper
举几个例子,看看它是否像你期望的那样工作。然后下一步是设置测试,看看这些库:hspec
一个测试库(只有这个你可以进行单元测试),QuickCheck
帮助您生成任意(模糊)数据来测试程序的属性(属性测试)。
关于algorithm - 如何在 Haskell 中调试 BST 验证算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58921963/
我是一名优秀的程序员,十分优秀!