合并方案

Merge in scheme

尝试将方案和 运行 中的两个列表合并到我的代码中的#void 错误中

    (define x '(1 2 3 4 5 6 7 8 15 10))
    (define z '(11 12 13))

    (define merge
        (lambda (list1 list2)
            (cond [(null? list1) list2] ;if first list is empty return second list
                  [(null? list2) list1] ;if second list is empty return first list
                  [(if (< (car list1) (car list2))
                      (cons (car list1) (merge (cdr list1) list2)))] ;if 1st item in 1st list is less than 1st item in second list (cons 1st item from 1st list with merge call)
                  [(if (> (car list1) (car list2))
                      (cons (car list2) (merge (cdr list2) list1)))] ;if 1st item in 1st list is greater than 1st item in second list (cons 1st item in the 2nd list with merge call)
      )))

输出在合并中以 void 结束

        > (merge x z)
        (1 2 3 4 5 6 7 8 . #<void>)
        > 

您的 cond 中有 if 个语句,但缺少一个 else 子句。

(define x '(1 2 3 4 5 6 7 8 15 10))
(define z '(11 12 13))

(define merge
    (lambda (list1 list2)
        (cond [(null? list1) list2] ;if first list is empty return second list
              [(null? list2) list1] ;if second list is empty return first list
              [(< (car list1) (car list2))
                  (cons (car list1) (merge (cdr list1) list2))] ;if 1st item in 1st list is less than 1st item in second list (cons 1st item from 1st list with merge call)
              [(> (car list1) (car list2))
                  (cons (car list2) (merge (cdr list2) list1))] ;if 1st item in 1st list is greater than 1st item in second list (cons 1st item in the 2nd list with merge call)
              [else (cons (car list1) (cons (car list2) (merge (cdr list1) (cdr list2))))]
  )))

看到:

> (merge x z)
'(1 2 3 4 5 6 7 8 11 12 13 15 10)

#<void> 不见了。