當我試圖寫將插入一個數字到現有的樹中的功能。到目前爲止,我有方案#<void>寫一個函數
(define (make-tree v left right)
(list v left right))
(define (value t)
(car t))
(define(left t)
(cadr t))
(define(right t)
(caddr t))
(define new-tree (make-tree 10
(make-tree 6
(make-tree 3 null null)
(make-tree 7 null null))
(make-tree 11
(make-tree 3 null null)
(make-tree 12 null null))))
(define(my-tree initial-tree)
(let ((tree initial-tree))
(define (element? f)
(define(sub-element? f t)
(begin
(cond
((null? t) #f)
((eq? f (value t)) #t)
((> f (value t)) (sub-element? f (right t)))
((< f (value t)) (sub-element? f (left t))))))
(sub-element? f tree))
(define (insert f)
(define (sub-insert f t)
(begin
(set! tree
(cond
((null? t) (make-tree f null null))
((eq? f (value t)) t)
((< f (value t)) (make-tree (value t) (sub-insert f (left t)) (right t)))
((> f (value t)) (make-tree (value t) (left t) (sub-insert f (right t))))))))
(sub-insert f tree)
tree)
(lambda (method)
(cond
((eq? method 'insert) insert)
((eq? method 'element?) element?)))))
得到的輸出(10 #<void> (11 (3()()) (12()())))
當我做((test-tree 'insert)5)
。我想知道爲什麼會出現這種情況。
您發佈的代碼顯然不完整(至少缺少幾個圓括號)。 –
這是一個更大的功能的一部分。另一部分起作用,我不想在那裏放置更多的東西,以方便閱讀。我只是想知道爲什麼這會導致#或更普遍的原因。 –
nromer
什麼函數返回'#'?沒有這些信息,我們如何才能找出問題所在? '#'返回值出現通過相同的情況下與任何其他的返回值:如果在尾部位置返回'#表達式(多個)'。 –