Scheme 将列表创建到树中

Scheme 将列表创建到树中,scheme,racket,Scheme,Racket,它不能正常工作 (define (tree-insert v t) (cond((null? t)(make-tree v '() '())) ((eq? v (value t)) t) ((< v (value t)) (make-tree (value t) (tree-insert v (left t)) (right t))) ((>

它不能正常工作

(define (tree-insert v t)
  (cond((null? t)(make-tree v '() '()))
   ((eq? v (value t)) t)
   ((< v (value t)) (make-tree (value t)
                               (tree-insert v (left t))
                               (right t)))
   ((> v (value t)) (make-tree (value t)
                               (tree-insert v (right t))
                               (left t)))))
(define (insert-list l t)
  (if (null? l)
     t
     (insert-list (cdr l)
               (tree-insert(car l)t))))
(insert-list '(5 2 1 3 11 8 6 9 15 17) '())
; ==> (5 (2 (1 (17 () ()) (8 () ())) (3 (9 () ()) ())) (11 (15 () ()) (6 () ()))) 
(定义(树插入v t)
(cond((null?t)(生成树v’()))
((等式v(值t))t)
(v(值t))(生成树(值t)
(树插入v(右t))
(左t(()))
(定义(插入列表l t)
(如果(空?l)
T
(插入列表(cdr l)
(树木插页(汽车左)t)
(插入列表’(52131188691517)“”)
; ==> (5 (2 (1 (17 () ()) (8 () ())) (3 (9 () ()) ())) (11 (15 () ()) (6 () ()))) 

您正在>案例中左右交换。请尝试以下方法:

(define (tree-insert v t)
  (cond((null? t)(make-tree v '()'()))
   ((eq? v (value t)) t)
   ((< v (value t)) (make-tree (value t)
                               (tree-insert v (left t))
                               (right t)))
   ((> v (value t)) (make-tree (value t)
                               (left t)
                               (tree-insert v (right t))))))
(定义(树插入v t)
(cond((null?t)(生成树v’()))
((等式v(值t))t)
(v(值t))(生成树(值t)
(左t)
(树插入v(右t(()()())))
(等式5)
根据报告可能是
#f
。您应该使用
=
eqv?