Функции отображения
Функция отображения применяет заданную функцию (не специальную форму или макрос) к каждому элементу последовательности, например списка, вектора или строки (см. Последовательности, массивы и векторы). В Emacs Lisp есть несколько таких функций; в этом разделе описаны mapcar, mapc, mapconcat и mapcan, которые отображают последовательности. Описание функции mapatoms, которая отображает символы в obarray, см. в разделе Определение mapatoms. Описание функции maphash, которая отображает пары «ключ/значение» в хеш-таблице, см. в разделе Определение maphash.
Эти функции отображения не работают с таблицами символов, поскольку таблица символов — это разреженный массив с очень большим номинальным диапазоном индексов. Чтобы отобразить таблицу символов с учётом её разреженной структуры, используйте функцию map-char-table (см. Таблицы символов).
- Функция: mapcar function sequence
-
mapcarпо очереди применяет function к каждому элементу sequence и возвращает список результатов.Аргумент sequence может быть последовательностью любого типа, кроме таблицы символов, то есть списком, вектором, булевым вектором или строкой. Результат всегда является списком. Длина результата совпадает с длиной sequence. Например:
(mapcar #'car '((a b) (c d) (e f))) ⇒ (a c e) (mapcar #'1+ [1 2 3]) ⇒ (2 3 4) (mapcar #'string "abc") ⇒ ("a" "b" "c");; Call each function inmy-hooks. (mapcar 'funcall my-hooks)(defun mapcar* (function &rest args) "Apply FUNCTION to successive cars of all ARGS. Return the list of results." ;; If no list is exhausted, (if (not (memq nil args)) ;; apply function to CARs. (cons (apply function (mapcar #'car args)) (apply #'mapcar* function ;; Recurse for rest of elements. (mapcar #'cdr args)))))
(mapcar* #'cons '(a b c) '(1 2 3 4)) ⇒ ((a . 1) (b . 2) (c . 3))
- Функция: mapcan function sequence
-
Эта функция применяет function к каждому элементу sequence, как
mapcar, но вместо сбора результатов в список возвращает один список со всеми элементами результатов (которые должны быть списками), изменяя сами результаты (с помощьюnconc; см. Функции перестановки списков). Как и в случае сmapcar, sequence может иметь любой тип, кроме таблицы символов.;; Contrast this: (mapcar #'list '(a b c d)) ⇒ ((a) (b) (c) (d)) ;; with this: (mapcan #'list '(a b c d)) ⇒ (a b c d)
- Функция: mapc function sequence
mapcпохожа наmapcar, но function используется только для побочных эффектов: возвращаемые ею значения игнорируются, а не собираются в список.mapcвсегда возвращает sequence.
- Функция: mapconcat function sequence &optional separator
-
mapconcatприменяет function к каждому элементу sequence; результаты, которые должны быть последовательностями символов (строками, векторами или списками), объединяются в одну строку, возвращаемую функцией. Между каждой парой последовательностей-результатовmapconcatвставляет символы из separator, который также должен быть строкой, вектором или списком символов; значениеnilрассматривается как пустая строка. См. Последовательности, массивы и векторы.Аргумент function должен быть функцией, принимающей один аргумент и возвращающей последовательность символов: строку, вектор или список. Аргумент sequence может быть последовательностью любого типа, кроме таблицы символов, то есть списком, вектором, булевым вектором или строкой.
(mapconcat #'symbol-name '(The cat in the hat) " ") ⇒ "The cat in the hat"(mapconcat (lambda (x) (format "%c" (1+ x))) "HAL-8000") ⇒ "IBM.9111"
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Mapping-Functions.html