我有一个列表((x 1) (y 2) (z 3))
,我想制作两个单独的列表:(x y z)
和
(1 2 3)
我尝试使用递归调用,使用car和cdr,但它没有用。有一个简单的方法吗? 感谢。
答案 0 :(得分:3)
cdr
返回列表的尾部,这是一个列表(假设输入是列表,而不是cons单元格)。您可能希望使用cadr
代替((car (cdr foo))
的简写)。你可以这样做:
(map car lst) ; '(x y z)
(map cadr lst) ; '(1 2 3)
(map
将调用将给定函数应用于列表中的每个项目。)
答案 1 :(得分:1)
(apply map list lst) ; returns ((x y z) (1 2 3))
或者使用srfi-1中的unzip2
。
答案 2 :(得分:0)
以ls作为你的清单:(地图车ls)和(地图车(地图cdr ls))