我有2个动态列表,我想合并为一个.
说
'(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
和
'(15 16)
Run Code Online (Sandbox Code Playgroud)
得到
'(1 2 3 4 15 16)
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
Ósc*_*pez 13
使用append此:
(append '(1 2 3 4) '(15 16))
=> '(1 2 3 4 15 16)
Run Code Online (Sandbox Code Playgroud)
或者,如果您要合并两个排序列表并需要维护结果列表中的顺序:
(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)))))
Run Code Online (Sandbox Code Playgroud)
例子:
> (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)
Run Code Online (Sandbox Code Playgroud)