append
append Function
Syntax:
append &rest lists → result
Arguments and Values:
list—each must be a proper list except the last, which may be any object.
result—an object. This will be a list unless the last list was not a list and all preceding lists were null.
Description:
append returns a new list that is the concatenation of the copies. lists are left unchanged; the list structure of each of lists except the last is copied. The last argument is not copied; it becomes the cdr of the final dotted pair of the concatenation of the preceding lists, or is returned directly if there are no preceding non-empty lists.
Examples:
(append ’(a b c) ’(d e f) ’() ’(g)) → (A B C D E F G)
(append ’(a b c) ’d) → (A B C . D)
(setq lst ’(a b c)) → (A B C)
(append lst ’(d)) → (A B C D)
lst → (A B C)
(append) → NIL
(append ’a) → A
See Also:
nconc, concatenate
Expanded Reference: append
Concatenating two lists
append returns a new list that is the concatenation of its arguments. All arguments except the last are copied.
(append '(a b c) '(d e f))
=> (A B C D E F)
Concatenating multiple lists
append accepts any number of arguments.
(append '(1 2) '(3 4) '(5 6))
=> (1 2 3 4 5 6)
(append '(a) '(b) '(c) '(d))
=> (A B C D)
append does not modify the original lists
All arguments except the last are copied. The original lists remain unchanged.
(let ((x '(1 2 3))
(y '(4 5 6)))
(append x y)
(values x y))
=> (1 2 3)
=> (4 5 6)
The last argument is shared, not copied
The last argument becomes the tail of the result without being copied. This means mutations to the last argument's structure will be visible through the result.
(let* ((tail (list 4 5))
(result (append '(1 2 3) tail)))
(setf (car tail) 40)
result)
=> (1 2 3 40 5)
append with NIL arguments
NIL arguments are effectively skipped.
(append nil '(a b c))
=> (A B C)
(append '(a b c) nil)
=> (A B C)
(append nil nil nil)
=> NIL
The last argument need not be a list
If the last argument is not a list, the result is a dotted list.
(append '(a b c) 'd)
=> (A B C . D)
(append '(1 2) 3)
=> (1 2 . 3)
append with no arguments
Calling append with no arguments returns NIL.
(append)
=> NIL