anchor.diff:      ((every #'numberp args)
        (apply #'cl:+ args))
       ((every #'quaternionp args)
  -     (apply (function q+) args))
  +     (apply #'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+)
  +     (error "Incompatible types for '+': ~S"
  +            (mapcar #'type-of args)))
  +    (t (apply #'q+
                 (mapcar
                  (lambda (x) (cond
                           ((quaternionp x) x)
  
positive.code:   "
  DO:    A Generic multiplication with numbers or quaternions.
  "
    (COND
      ((EVERY (FUNCTION NUMBERP) ARGS)
       (APPLY (FUNCTION COMMON-LISP:*) ARGS))
      ((EVERY (FUNCTION 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:   (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))))
        (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)))
  