方案中的一个列表到两个列表

时间:2011-05-14 06:39:23

标签: scheme

我有一个列表((x 1) (y 2) (z 3)),我想制作两个单独的列表:(x y z)(1 2 3)

我尝试使用递归调用,使用car和cdr,但它没有用。有一个简单的方法吗? 感谢。

3 个答案:

答案 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))