Another somewhat obscure feature of Lisp is rotatef. The rotatef function takes as its arguments a set of places (variables or forms that can be assigned to with setf, think l-value from C++). It then rotates them, so that the value of the second is moved to the first place, the value of the third moved to the second, and so on, with the value of the first place being moved to the last place.
Calling
CL-USER> (rotatef place1 place2 place3)
is almost like calling
CL-USER> (psetf place1 place2 place2 place3 place3 place1)
with the caveat that the psetf example will evaluate each place twice, so if there are side-effects, the behaviour may not be as expected.
Finally, here is an example of using rotatef on places:
CL-USER> (let ((list1 (list 1 2 3 4)) (list2 (list :A :B :C :D)) (list3 (list "a" "b" "c" "d"))) (rotatef (cdr list1) (cdr list2) (cdr list3)) (values list1 list2 list3)) (1 :B :C :D) (:A "b" "c" "d") ("a" 2 3 4)