我有一個計劃函數,我有一個列表,我試圖將數字逐個放入二進制搜索樹中。然而,我不斷收到「未指定的返回值」計劃中的二叉搜索樹
(define (insertB L)
(if (not (null? L))
(begin (let() BST (insert (car L) BST))
(insertB (cdr L))
)
)
)
我知道我的插入函數適用於單個數字。但我需要讓insertB爲列表工作。
我有一個計劃函數,我有一個列表,我試圖將數字逐個放入二進制搜索樹中。然而,我不斷收到「未指定的返回值」計劃中的二叉搜索樹
(define (insertB L)
(if (not (null? L))
(begin (let() BST (insert (car L) BST))
(insertB (cdr L))
)
)
)
我知道我的插入函數適用於單個數字。但我需要讓insertB爲列表工作。
你能概括一下BST
這個參數嗎?
(define (insertB L BST)
(if (not (null? L))
(insertB (cdr L) (insert (car L) BST))
BST
)
)
或等值:
(define (insertB L BST)
(if (null? L)
BST
(insertB (cdr L) (insert (car L) BST))
)
)
我認爲這是比較容易理解。這也是更一般的。
我仍然收到未指定的返回值 – user062495 2015-02-07 18:09:49
@SamanthaBewley是的,對不起,現在它已修復。 – 2015-02-07 18:10:20
試試這個:
(define (insertB BST L)
(if (null? L)
BST
(insertB (insert (car L) BST)
(cdr L))))
它的更好,如果我們通過BST
一起作爲參數,而不是使用一個全球性的定義。除此之外,當我們完成遍歷列表(基本大小寫)時,您必須確保返回修改過的樹。另外請注意,在每次遞歸調用中,我們將insert
樹中的當前元素傳遞給它,同時我們轉到列表中的下一個元素。如果高階過程是允許的,我們可以寫一個簡單的,相當的解決方案:
(define (insertB BST L)
(foldr insert BST L))
你有一個工作'insert'並希望將其應用到整個名單? – 2015-02-07 17:54:55
是的我試圖從數字列表中創建BST – user062495 2015-02-07 17:57:35