Відображення полягає в застосуванні функції до кожного елемента послідовності, у результаті чого утворюється нова послідовність.
Функцію mapcar можна використати, щоб застосувати функцію до кожного елемента списку обʼєктів
(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)
Зауважмо, що першим аргументом є функція, яку слід викликати.
Запис #' - це спеціальний синтаксис цитування, який указує на функцію.
(Тут можна використати 'double, але вживання #' є ідіоматичним і, можливо, «правильнішим».)
Відображення не обмежується застосуванням функції до однієї послідовності, його можна виконувати й для кількох послідовностей.
Якщо передати N послідовностей, то функція має приймати N аргументів.
(mapcar #'list '(1 2) '(a b) '("foo" "bar")) ; => ((1 a "foo") (2 b "bar"))
Крім mapcar існують й інші функції для відображення списків.
mapcar безумовно найпоширеніша, але про інші теж варто знати.
maplist працює подібно до mapcar, але не з елементами, а з послідовними підсписками.
Спочатку з усім списком, потім із cdr, потім із cdr від нього і так далі:
(maplist #'identity '(a b c)) ; => ((A B C) (B C) (C))
mapc і mapl схожі на mapcar і maplist відповідно, але вони не збирають результати, а повертають перший список.
Їх використовують для операцій із побічними ефектами.
mapcan і mapcon схожі на mapcar і maplist, але результат сплющується за допомогою nconc, яка схожа на append, але деструктивна щодо всіх своїх аргументів, крім останнього.
Відображення не обмежується списками. Можна відображати будь-яку послідовність (про це йдеться в іншій концепції).
Для послідовностей, які не є списками, використовують функцію map.
map приймає 3 або більше аргументів:
(map 'list #'double '(1 2 3)) ; => (2 4 6)
(map 'string #'char-upcase "foobar") ; => "FOOBAR"
В окремому випадку, якщо як тип результуючої послідовності передати nil, то повертається nil.
Це (як і mapc та mapl вище) використовують для побічних ефектів.