Я читаю книгу Язык программирования Scheme. Я пытаюсь выполнить упражнение 2.8.7:
Используйте карту для определения процедуры транспонирования, которая принимает список пар и возвращает пару списков следующим образом.
(транспонировать '((a . 1) (b . 2) (c . 3))) ;;=> ((a b c) 1 2 3)
[Подсказка: ((a b c) 1 2 3) совпадает с ((a b c) . (1 2 3)).]
Я узнал, что (map list '(a 1) '(b 2) '(c 3))
дает мне '((a b c) (1 2 3))
. Думаю, я мог бы решить это упражнение, написав кучу шаблонов для превращения '((a . 1) (b . 2) (c . 3))
в (map list '(a 1) '(b 2) '(c 3))
и '((a b c) (1 2 3))
в ((a b c) 1 2 3)
. Однако я уверен, что смысл упражнения не в этом.
Может кто-нибудь помочь мне здесь? Есть ли очевидный способ сделать это с помощью карты, которую мне не хватает?