合并方案
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>
不见了。
尝试将方案和 运行 中的两个列表合并到我的代码中的#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>
不见了。