【发布时间】:2020-04-04 02:42:07
【问题描述】:
我是方案新手,我正在尝试学习如何遍历 B 树。我仅限于语言中的某些命令,这使得这变得更加复杂。
这是我目前所拥有的:
(define tree'("R" 100 999
(
("R" 100 199
(
("L" 120 140 160 180)
)
)
("R" 200 299
(
("L" 220 240 260 280)
)
)
)))
(define (treeTraversal a)
(if(equal? (null? a) #t) 0
(cdr (treeTraversal (cdr a)))))
(treeTraversal tree)
当我通过调试器运行它时,它显示它正在下降列表,首先将第一个“R”剪掉,然后剪掉 100,然后剪掉 999,但从那里列表变为空并在调试器中显示“()”。之后我得到错误:
mcdr:违反合同
预期:mpair?
给定:0
我知道它返回 0 是因为该函数现在看到一个空列表,但我不明白为什么列表变为 null 而不是继续读入嵌套列表。
感谢任何想法和建议。这是我第一次发布问题,所以请耐心等待:)
【问题讨论】:
-
(equal? (null? a) #t)实际上是(null? a),因为null?返回一个布尔值。 -
好点,但我仍然无法通过列表中的前三个项目。我仍然遇到同样的错误。
-
@tjorchrt 我理解你对 b 树的看法,我知道。我想我应该把它放在引号中,因为我并没有真正专注于树的构造,甚至它是一个 b-tree。这项工作的重点是递归的概念,并使用它在树中的一个叶子中找到某个值。我的教授给了我们这棵树作为示例,说明如何使用列表中的列表制作树。因此,尽管您搜索 b-tree 的建议将进一步解释我对它们的了解,但我不确定它是否真的有助于解决我的问题。谢谢你
标签: recursion scheme racket b-tree