Common Lisp the Language, 2nd Edition
The functions rplaca and rplacd may be used to make alterations in already existing list structure, that is, to change the car or cdr of an existing cons. One may also use setf in conjunction with car and cdr.
The structure is not copied but is destructively altered; hence caution should be exercised when using these functions, as strange side effects can occur if portions of list structure become shared. The nconc, nreverse, nreconc, and nbutlast functions, already described, have the same property, as do certain of the generic sequence functions such as delete. However, they are normally not used for this side effect; rather, the list-structure modification is purely for efficiency, and compatible non-modifying functions are provided.
[Function]
rplaca x y
(rplaca x y) changes the car of x to y and returns (the modified) x. x must be a cons, but y may be any Lisp object. For example:
(setq g '(a b c)) (rplaca (cdr g) 'd) => (d c) Now g => (a d c)
[Function]
rplacd x y
(rplacd x y) changes the cdr of x to y and returns (the modified) x. x must be a cons, but y may be any Lisp object. For example:
(setq x '(a b c)) (rplacd x 'd) => (a . d) Now x => (a . d)
The functions rplaca and rplacd go back to the earliest
origins of Lisp, along with car, cdr, and cons.
Nowadays, however, they seem to be falling by the wayside.
More and more Common Lisp programmers use setf for nearly
all structure modifications: (rplaca x y) is rendered
as (setf (car x) y) or perhaps as (setf (first x) y).
Even more likely is that a defstruct structure or a CLOS class
is used in place of a list, if the data structure is at all complicated;
in this case setf is used with a slot accessor.