Функции отображения
Функция отображения применяет заданную функцию (не специальную форму или макрос) к каждому элементу списка или другого набора. В Emacs Lisp имеется несколько таких функций; в этом разделе описаны mapcar, mapc, mapconcat, и mapcan, которые отображают список. См. Определение mapatoms, для функции mapatoms, которая отображает символы в obarray. См. Определение maphash, для функции maphash, которая отображает пары ключ/значение в хеш-таблице.
Эти функции отображения не поддерживают char-таблицы, потому что char-таблица является разреженным массивом, чьи номинальные индексы очень велики. Чтобы отобразить char-таблицу должным образом учитывая её разреженную природу, используйте функцию map-char-table (см. Char-Таблицы).
- Функция: mapcar функция последовательность
-
mapcarприменяет функцию к каждому элементу последовательности по очереди и возвращает список результатов.Аргумент последовательность может быть любого типа последовательности, кроме char-таблицы; то есть, список, вектор, bool-вектор или строка. Результат всегда является списком. Длина результата такая же, как длина последовательности. Например:
(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 функция последовательность
-
Эта функция применяет функцию к каждому элементу последовательности, подобно
mapcar, но вместо сбора результатов в список, она возвращает один список со всеми элементами результатов (которые должны быть списками), изменяя результаты (используяnconc; см. Переупорядочивание). Как и в случае сmapcar, последовательность может быть любого типа, кроме char-таблицы.;; 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 функция последовательность
mapcподобнаmapcar, за исключением того, что функция используется только для побочных эффектов — значения, которые она возвращает, игнорируются, а не собираются в список.mapcвсегда возвращает последовательность.
- Функция: mapconcat функция последовательность разделитель
-
mapconcatприменяет функцию к каждому элементу последовательности; результаты, которые должны быть последовательностями символов (строки, векторы или списки), конкатенируются в одно строковое значение возврата. Между каждой парой последовательностей результатовmapconcatвставляет символы из разделителя, который также должен быть строкой, или вектором или списком символов. См. Последовательности Массивы Векторы.Аргумент функция должен быть функцией, которая может принять один аргумент и возвращает последовательность символов: строку, вектор или список. Аргумент последовательность может быть любого типа последовательности, кроме char-таблицы; то есть, список, вектор, bool-вектор или строка.
(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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Mapping-Functions.html