gpt4 book ai didi

algorithm - 如何在 Haskell 中调试 BST 验证算法?

转载 作者:行者123 更新时间:2023-12-01 14:29:02 26 4
gpt4 key购买 nike

我正在尝试编写一个树满足 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com