如何在球拍中将 2 个列表合并为一个
How to Merge 2 lists into one in racket
我有 2 个动态列表,我想将它们合并为一个。
说
'(1 2 3 4)
和
'(15 16)
并得到
'(1 2 3 4 15 16)
如何做到这一点?
为此使用 append
:
(append '(1 2 3 4) '(15 16))
=> '(1 2 3 4 15 16)
或者,如果您要合并两个已排序的列表并需要保持结果列表中的顺序:
(require srfi/1)
(define (merge-sorted-lists lhs rhs #:order (lt? <))
(let loop ((result '())
(lhs lhs)
(rhs rhs))
(cond ((null? lhs) (append-reverse result rhs))
((null? rhs) (append-reverse result lhs))
((lt? (car rhs) (car lhs))
(loop (cons (car rhs) result) lhs (cdr rhs)))
(else
(loop (cons (car lhs) result) (cdr lhs) rhs)))))
示例:
> (merge-sorted-lists '(1 3 5 7) '(2 4 6 8))
'(1 2 3 4 5 6 7 8)
> (merge-sorted-lists '(7 5 3 1) '(8 6 4 2) #:order >)
'(8 7 6 5 4 3 2 1)
我有 2 个动态列表,我想将它们合并为一个。
说
'(1 2 3 4)
和
'(15 16)
并得到
'(1 2 3 4 15 16)
如何做到这一点?
为此使用 append
:
(append '(1 2 3 4) '(15 16))
=> '(1 2 3 4 15 16)
或者,如果您要合并两个已排序的列表并需要保持结果列表中的顺序:
(require srfi/1)
(define (merge-sorted-lists lhs rhs #:order (lt? <))
(let loop ((result '())
(lhs lhs)
(rhs rhs))
(cond ((null? lhs) (append-reverse result rhs))
((null? rhs) (append-reverse result lhs))
((lt? (car rhs) (car lhs))
(loop (cons (car rhs) result) lhs (cdr rhs)))
(else
(loop (cons (car lhs) result) (cdr lhs) rhs)))))
示例:
> (merge-sorted-lists '(1 3 5 7) '(2 4 6 8))
'(1 2 3 4 5 6 7 8)
> (merge-sorted-lists '(7 5 3 1) '(8 6 4 2) #:order >)
'(8 7 6 5 4 3 2 1)