PSETF - параллельное присваивание

(psetq var1 значение1 ...varn значениеn) ⇒ NIL
(psetf место1 значение1 ...местоn значениеn) ⇒ NIL

  1. Сначала вычисляются все значения, включая подформы в "местах", слева направо.
  2. Затем значения присваиваются по местам в непредсказуемом порядке.
Пример
(psetq x (list 'a 'b)
       y (list 1 2 3))
NIL
(psetf (first x) 'x 
       (second y) (first x) 
       (rest x) y)
NIL 
x ⇒ (X 1 A 3) 
y ⇒ (1 A 3)
(setf (first x) 'x 
      (second y) (first x) 
      (rest x) y)
(1 X 3)
x ⇒ (X 1 X 3) 
y ⇒ (1 X 3)
;; Транспонирование квадратной матрицы A
(loop with n = (array-dimension a 0)
      for i upfrom 0 below n do
      (loop for j upfrom (1+ i) below n do
            (psetf (aref a i j) (aref a j i)
                   (aref a j i) (aref a i j))))