例如,我有这个列表:L
((a 1) (b 2) (c 3)) ((d 4) (e 5) (f 6))
我怎么能把它变成
((a 1) (b 2) (c 3) (d 4) (e 5) (f 6))
包含两个列表的列表,我需要创建一个包含列表的列表。
我知道如果我开车L我得到前半部分((a 1) (b 2) (c 3))
如果我cdr
L
我得到后半部分
(((d 4) (e 5) (f 6)))
但我无法弄清楚如何将其变成表格
((a 1) (b 2) (c 3) (d 4) (e 5) (f 6))
答案 0 :(得分:4)
要“合并”两个列表(无论其内容如何),请使用append
。要访问列表的第一个和第二个元素,请使用(car x)
和(cadr x)
- 这是(car (cdr x))
的简写。例如:
(define lst '(((a 1) (b 2) (c 3)) ((d 4) (e 5) (f 6))))
(append (car lst) (cadr lst))
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6))
有关适用于任意数量子列表的更通用解决方案,请参阅@ uselpa使用apply
的正确答案。或者,如果您使用的是Racket,append*
也适用于多个子列表:
(define lst '(((a 1) (b 2) (c 3)) ((d 4) (e 5) (f 6)) ((g 7) (h 8) (i 9))))
(append* lst)
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6) (g 7) (h 8) (i 9))
答案 1 :(得分:2)
为了补充Oscar的答案,(apply append ...)
适用于任意数量的子列表:
(define L '(((a 1) (b 2) (c 3))
((d 4) (e 5) (f 6))))
(apply append L)
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6))
和
(define G '(((a 1) (b 2) (c 3))
((d 4) (e 5) (f 6))
((g 7) (h 8) (i 9))))
(apply append G)
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6) (g 7) (h 8) (i 9))