Spec-Zone.ru › Elisp

Функции отображения

Функция отображения применяет заданную функцию (не специальную форму или макрос) к каждому элементу списка или другого набора. В 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 in my-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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API