anchor.diff:    (let ((q-rotation (quaternion-from-axis-angle axis angle))
   	(q-vector (quaternion 0 (elt vector 0) (elt vector 1) (elt vector 2))))
       (let ((q-result (q* q-rotation q-vector (qconjugate q-rotation))))
  -      (vector (imagpart (quaternion-ri q-result))
  -	      (realpart (quaternion-jk q-result))
  -	      (imagpart (quaternion-jk q-result))))))
  +      (bind-quaternion (r i j k)
  +	  q-result
  +	(declare (ignore r))
  +	(vector i j k)))))
   
   ;; example usage:
   ;; CL-USER> (defun d2r (d)  (* pi (/ d 180.0)))
  
positive.code:     ((every #'numberp args)
       (apply #'cl:+ args))
      ((every #'quaternionp args)
       (apply (function q+) args))
      ((some (lambda (x) (not (or (numberp x) (quaternionp x)))) args)
       (ERROR "Incompatible types for '+': ~S"
              (MAPCAR (FUNCTION TYPE-OF) ARGS)))
      (t (apply (function q+)
                (mapcar
                 (lambda (x) (cond
                          ((quaternionp x) x)
  
negative.code:   "
  DO:    A Generic multiplication with numbers or quaternions.
  "
    (cond
      ((every #'numberp args)
       (apply #'common-lisp:* args))
      ((every #'quaternionp args)
       (apply #'q* args))
      ((some (lambda (x) (not (or (numberp x) (quaternionp x)))) args)
       (error "Incompatible types for '*': ~S"
              (mapcar #'type-of args)))
      (t (apply #'q*
                (mapcar
                 (lambda (x) (cond
                          ((quaternionp x) x)
  