0

我是 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?”。我不认为这是我的逻辑错误,但它可能是。这是另一个括号问题吗?
感谢您的时间!

4

1 回答 1

1

你的递归应该是

(追加 (as-list (cadr t)) (list (car t)) (as-list (caddr t)))

您只想在树上调用 as-list,而您的 t 的汽车不是树。

于 2012-09-14T21:09:04.590 回答