Skip to main content

nconc

nconc Function

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.

See Also:

append, concatenate

Expanded Reference: nconc

tip

TODO: Please contribute to this page by adding explanations and examples

(nconc )