メソッド引数のクラス判定の順番を通常の逆向きにする - lisp-cookbook-ja/common-lisp GitHub Wiki

defgenericにオプション :argument-precedence-order を与えることにより引数間で任意の優先順位を指定することが可能です。

(defmethod foo ((x number) y)
  'number)

(defmethod foo (x (y symbol))
  'symbol)

(foo 1 'symbol)
;=>  NUMBER

(defgeneric foo (x y)
  (:argument-precedence-order y x))


(foo 1 'symbol)
;=>  SYMBOL

(defgeneric foo (x y)
  (:argument-precedence-order x y))


(foo 1 'symbol)
;=>  NUMBER