Syntax:
nconc &rest lists => concatenated-list
Arguments and Values:
list---each but the last must be a list (which might be a dotted list but must not be a circular list); the last list may be any object.
concatenated-list---a list.
Description:
Returns a list that is the concatenation of lists. If no lists are supplied, (nconc) returns nil. nconc is defined using the following recursive relationship:
(nconc) => () (nconc nil . lists) == (nconc . lists) (nconc list) => list (nconc list-1 list-2) == (progn (rplacd (last list-1) list-2) list-1) (nconc list-1 list-2 . lists) == (nconc (nconc list-1 list-2) . lists)
Examples:
(nconc) => NIL (setq x '(a b c)) => (A B C) (setq y '(d e f)) => (D E F) (nconc x y) => (A B C D E F) x => (A B C D E F)Note, in the example, that the value of x is now different, since its last cons has been rplacd'd to the value of y. If (nconc x y) were evaluated again, it would yield a piece of a circular list, whose printed representation would be (A B C D E F D E F D E F ...), repeating forever; if the *print-circle* switch were non-nil, it would be printed as (A B C . #1=(D E F . #1#)).
(setq foo (list 'a 'b 'c 'd 'e) bar (list 'f 'g 'h 'i 'j) baz (list 'k 'l 'm)) => (K L M) (setq foo (nconc foo bar baz)) => (A B C D E F G H I J K L M) foo => (A B C D E F G H I J K L M) bar => (F G H I J K L M) baz => (K L M) (setq foo (list 'a 'b 'c 'd 'e) bar (list 'f 'g 'h 'i 'j) baz (list 'k 'l 'm)) => (K L M) (setq foo (nconc nil foo bar nil baz)) => (A B C D E F G H I J K L M) foo => (A B C D E F G H I J K L M) bar => (F G H I J K L M) baz => (K L M)
Side Effects:
The lists are modified rather than copied.
Affected By: None.
Exceptional Situations: None.
See Also:
Notes: None.