PREV UP NEXT GNU Emacs Lisp Reference Manual

11.6: Mapping Functions

A mapping function applies a given function to each element of a list or other collection. Emacs Lisp has three such functions; mapcar and mapconcat, which scan a list, are described here. For the third mapping function, mapatoms, see Creating Symbols.

Function: mapcar function sequence
mapcar applies function to each element of sequence in turn, and returns a list of the results.

The argument sequence may be a list, a vector, or a string. The result is always a list. The length of the result is the same as the length of sequence.

For example:

(mapcar 'car '((a b) (c d) (e f))) => (a c e) (mapcar '1+ [1 2 3]) => (2 3 4) (mapcar 'char-to-string "abc") => ("a" "b" "c") ;; Call each function in my-hooks. (mapcar 'funcall my-hooks) (defun mapcar* (f &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 f (mapcar 'car args)) (apply 'mapcar* f ;; Recurse for rest of elements. (mapcar 'cdr args))))) (mapcar* 'cons '(a b c) '(1 2 3 4)) => ((a . 1) (b . 2) (c . 3))
Function: mapconcat function sequence separator
mapconcat applies function to each element of sequence: the results, which must be strings, are concatenated. Between each pair of result strings, mapconcat inserts the string separator. Usually separator contains a space or comma or other suitable punctuation.

The argument function must be a function that can take one argument and return a string.

(mapconcat 'symbol-name
           '(The cat in the hat)
           " ")
     => "The cat in the hat"
(mapconcat (function (lambda (x) (format "%c" (1+ x))))
           "HAL-8000"
           "")
     => "IBM.9111"