ROTATEF - циклический сдвиг

(rotatef место1 ... местоn) ⇒ NIL

  1. Вычисляются значения из мест с 1 по n и где-то запоминаются.
  2. Значения с 2 по n и значение 1 присваиваются по местам место1 ... местоn соответственно.
Пример
(let ((i 0)
      (x (list 'a 'b 'c 'd 'e)))
  (rotatef (nth (incf i) x)
           (nth (incf i) x)
           (nth (incf i) x))
  x)
(A C D B E)
;; Транспонирование квадратной матрицы A
(loop with n = (array-dimension a 0)
      for i upfrom 0 below n do
      (loop for j upfrom (1+ i) below n do
            (rotatef (aref a i j) (aref a j i))))