我是 Scheme 的菜鸟。我有一个二叉搜索树。节点的格式是三个元素的列表,第一个是节点的值,第二个是左子节点,第三个是右子节点。“make”函数创建一个空树,如下所示:( () () () )。我能够创建树、插入值并查找树中是否存在某个值。当我尝试编写一个将树作为有序列表返回的函数时,我的问题就出现了。插入和制作功能:
;Inserts a number into the tree
(define (insert t x)
(cond ((null? (car t))
(list x (make) (make)))
((< x (car t))
(list (car t) (insert (cadr t) x) (caddr t)))
((> x (car t))
(list (car t) (cadr t) (insert (caddr t) x) ))
)
)
;Makes a new empty tree
(define (make)
(list (list) (list) (list))
)
那些工作正常。这是我的清单:
;Gives list of all numbers
(define (as-list t)
(cond
(
(null? (car t) )
(list)
)
(
#t
(append (as-list (cadr t)) (as-list (car t)) (as-list (caddr t)))
)
)
)
运行这个,我得到一个合同违规,说它预期“mpair?”。我不认为这是我的逻辑错误,但它可能是。这是另一个括号问题吗?
感谢您的时间!