in http://clhs.lisp.se/Body/m_setf_.htm, it says:

*For psetf, if more than one pair is supplied then the assignments of new values to places are done in parallel. More precisely, all subforms (in both the place and newvalue forms) that are to be evaluated are evaluated from left to right; after all evaluations have been performed, all of the assignments are performed in an unpredictable order.*

Unpredictable order?? I can't believe you can't predict the order of such a computer language function output!!

BUT, look at the examples in the same page:

*(setq x (cons 'a 'b) y (list 1 2 3)) => (1 2 3)*

(setf (car x) 'x (cadr y) (car x) (cdr x) y) => (1 X 3)

x => (X 1 X 3)

y => (1 X 3)

(setq x (cons 'a 'b) y (list 1 2 3)) => (1 2 3)

(psetf (car x) 'x (cadr y) (car x) (cdr x) y) => NIL

x => (X 1 A 3)

y => (1 A 3)

(setf (car x) 'x (cadr y) (car x) (cdr x) y) => (1 X 3)

x => (X 1 X 3)

y => (1 X 3)

(setq x (cons 'a 'b) y (list 1 2 3)) => (1 2 3)

(psetf (car x) 'x (cadr y) (car x) (cdr x) y) => NIL

x => (X 1 A 3)

y => (1 A 3)

If psetf evaluations were done in parallel, I would expect x => (X 1 2 3), and not (X 1 A 3).

Does anyone know the magic and mysterious way to predict that

*unpredictable order?*

Thank you