# (lispref.info)Setcdr

Next: Rearrangement Prev: Setcar Up: Modifying Lists
```
Altering the CDR of a List
--------------------------

The lowest-level primitive for modifying a CDR is `setcdr':

- Function: setcdr CONS OBJECT
This function stores OBJECT into the cdr of CONS.  The value
returned is OBJECT, not CONS.

Here is an example of replacing the CDR of a list with a different
list.  All but the first element of the list are removed in favor of a
different sequence of elements.  The first element is unchanged,
because it resides in the CAR of the list, and is not reached via the
CDR.

(setq x '(1 2 3))
=> (1 2 3)
(setcdr x '(4))
=> (4)
x
=> (1 4)

You can delete elements from the middle of a list by altering the
CDRs of the cons cells in the list.  For example, here we delete the
second element, `b', from the list `(a b c)', by changing the CDR of
the first cell:

(setq x1 '(a b c))
=> (a b c)
(setcdr x1 (cdr (cdr x1)))
=> (c)
x1
=> (a c)

Here is the result in box notation:

--------------------
|                    |
--------------   |   --------------   |    --------------
| car   | cdr  |  |  | car   | cdr  |   -->| car   | cdr  |
|   a   |   o-----   |   b   |   o-------->|   c   |  nil |
|       |      |     |       |      |      |       |      |
--------------       --------------        --------------

The second cons cell, which previously held the element `b', still
exists and its CAR is still `b', but it no longer forms part of this
list.

It is equally easy to insert a new element by changing CDRs:

(setq x1 '(a b c))
=> (a b c)
(setcdr x1 (cons 'd (cdr x1)))
=> (d b c)
x1
=> (a d b c)

Here is this result in box notation:

--------------        -------------       -------------
| car  | cdr   |      | car  | cdr  |     | car  | cdr  |
|   a  |   o   |   -->|   b  |   o------->|   c  |  nil |
|      |   |   |  |   |      |      |     |      |      |
--------- | --   |    -------------       -------------
|      |
-----         --------
|                      |
|    ---------------   |
|   | car   | cdr   |  |
-->|   d   |   o------
|       |       |
---------------

```

automatically generated by info2www