один список в два списка в схеме - PullRequest
3 голосов
/ 14 мая 2011

У меня есть список ((x 1) (y 2) (z 3)), и я хочу сделать 2 отдельных списка: (x y z) и (1 2 3)

Я пытался использовать рекурсивный вызов, используя car и cdr, но это не сработало. есть простой способ сделать это? Спасибо.

Ответы [ 3 ]

3 голосов
/ 14 мая 2011

cdr возвращает хвост списка, который является списком (при условии, что вход является списком, а не консорной ячейкой). Вы, вероятно, хотите использовать cadr вместо (сокращение от (car (cdr foo))). Вы могли бы сделать:

(map car lst)  ; '(x y z)
(map cadr lst) ; '(1 2 3)

(map вызовет применение данной функции к каждому элементу в списке).

1 голос
/ 18 мая 2011
(apply map list lst) ; returns ((x y z) (1 2 3))

Или используйте unzip2 из srfi-1.

0 голосов
/ 14 мая 2011

с ls в вашем списке: (map car ls) и (map car (map cdr ls))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...