Functional programming 方案中的二叉搜索树

Functional programming 方案中的二叉搜索树,functional-programming,scheme,binary-search-tree,Functional Programming,Scheme,Binary Search Tree,我有一个scheme函数,其中有一个列表,我试图把数字一个接一个地放到二叉搜索树中。但是,我一直得到“未指定的返回值” 我知道我的插入函数只适用于一个数字。但是我需要得到insertB来为列表工作 您能像这样概括BST参数吗 (define (insertB L BST) (if (not (null? L)) (insertB (cdr L) (insert (car L) BST)) BST ) ) 或同等标准: (define (insertB L BST)

我有一个scheme函数,其中有一个列表,我试图把数字一个接一个地放到二叉搜索树中。但是,我一直得到“未指定的返回值”


我知道我的插入函数只适用于一个数字。但是我需要得到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))
  )
)

我认为这更容易理解。它也更一般。

您能像这样概括
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))
  )
)
我认为这更容易理解。它也更通用。

试试这个:

(define (insertB BST L)
  (if (null? L)
      BST
      (insertB (insert (car L) BST)
               (cdr L))))
最好将
BST
作为参数传递,而不是使用全局定义。除此之外,您必须确保在遍历完列表(基本情况)后返回修改过的树。还要注意,在每次递归调用时,我们如何在树中插入当前元素并传递它,同时转到列表中的下一个元素。如果允许高阶过程,我们可以编写一个更简单、等效的解决方案:

(define (insertB BST L)
  (foldr insert BST L))
试试这个:

(define (insertB BST L)
  (if (null? L)
      BST
      (insertB (insert (car L) BST)
               (cdr L))))
最好将
BST
作为参数传递,而不是使用全局定义。除此之外,您必须确保在遍历完列表(基本情况)后返回修改过的树。还要注意,在每次递归调用时,我们如何在树中插入当前元素并传递它,同时转到列表中的下一个元素。如果允许高阶过程,我们可以编写一个更简单、等效的解决方案:

(define (insertB BST L)
  (foldr insert BST L))

您有一个正在工作的
insert
并希望将其应用于整个列表?是的,我正在尝试从数字列表中创建BST您有一个正在工作的
insert
并希望将其应用于整个列表?是的,我正在尝试从数字列表中创建BST我仍然得到一个未指定的返回值我仍然得到一个未指定的返回值价值