Re: DEFSTRUCT POINT
The following will work in CL and I believe elisp.
(psetf (point-x p) (point-y p)
(point-y p) (point-x p))
If not, you may need to use an explicit temporary variable. Something like
(let ((x (point-x p)))
(setf (point-x p) (point-y p)
(point-y p) x))