&rest
lists → concatenated-list
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:
(apply #'nconc nil lists) ≡ (apply #'nconc lists) (nconc list-1 list-2) ≡ (progn (rplacd (last list-1) list-2) list-1) (apply #'nconc list-1 list-2 lists) ≡ (apply #'nconc (nconc list-1 list-2) lists)
(nconc)
→(nconc (list 'foo 'bar 'baz)))
→(FOO BAR BAZ)
(defparameter *x* '(a b c))
→(A B C)
(defparameter *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#))
.
(defparameter *foo* (list 'a 'b 'c 'd 'e))
→*FOO*
(defparameter *bar* (list 'f 'g 'h 'i 'j))
→*BAR*
(defparameter *baz* (list 'k 'l 'm))
→*BAZ*
(setf *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)
(setf *foo* (list 'a 'b 'c 'd 'e)
→(A B D C E)
(setf *bar* (list 'f 'g 'h 'i 'j))
→(F G H I J)
→(K L M)
(setf *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)
The lists are modified rather than copied.
None.
None.
To be done.
None.
\issue{REMF-DESTRUCTION-UNSPECIFIED:X3J13-MAR-89} \issue{DOTTED-LIST-ARGUMENTS:CLARIFY}