(defclass a () ())
(defclass b (a) ())
(defgeneric foo (x y)
(:argument-precedence-order y x))
(defmethod foo ((a a) x)
1)
(defmethod foo ((a a) (x (eql :asd)))
2)
(defmethod foo ((b b) x)
3)
(dolist (obj (mapcar 'make-instance '(a b)))
(dolist (x '(t :asd))
(format t "~&(foo ~a ~a) => ~a" obj x (foo obj x))))
KGRlZmNsYXNzIGEgKCkgKCkpCihkZWZjbGFzcyBiIChhKSAoKSkKCihkZWZnZW5lcmljIGZvbyAoeCB5KQogICg6YXJndW1lbnQtcHJlY2VkZW5jZS1vcmRlciB5IHgpKQoKKGRlZm1ldGhvZCBmb28gKChhIGEpIHgpIAogIDEpCgooZGVmbWV0aG9kIGZvbyAoKGEgYSkgKHggKGVxbCA6YXNkKSkpCiAgMikKCihkZWZtZXRob2QgZm9vICgoYiBiKSB4KQogIDMpCgooZG9saXN0IChvYmogKG1hcGNhciAnbWFrZS1pbnN0YW5jZSAnKGEgYikpKQogIChkb2xpc3QgKHggJyh0IDphc2QpKQogICAgKGZvcm1hdCB0ICJ+Jihmb28gfmEgfmEpID0+IH5hIiBvYmogeCAoZm9vIG9iaiB4KSkpKQ==