我在编写一个遍历二叉树的函数时遇到问题,该函数接受 search_term、list 并返回 true 或 false。这就是我所拥有的,这与我在谷歌搜索如何在 Scheme 中实现二进制搜索时发现的基本相同。
(define (tree-lookup val tree)
(if (empty-tree? tree)
#f
(let ((curr-val (node-value tree))
(left (node-left tree))
(right (node-right tree)))
(cond ((equal? val curr-val) #t)
((< val curr-val))
(tree-lookup val left)
(else
(tree-lookup val right))))))
(define tree-test '(((1 2) 3)(4 (5 6)) 7 (8 9 10))) ; Test tree
当它试图将“val”变量与节点进行比较时,问题就来了。这意味着我将实数与列表进行比较,例如 (< 2 '((1 2) 3))。我尝试只测试原子值,但是当我到达一片叶子时,我被困在如何回到树上。
这是错误消息:
<: contract violation
expected: real?
given: '{{1 2} 3}
argument position: 2nd
other arguments...:
8