(defgeneric foo (x &rest r)) (defmethod foo ((x integer) &rest r) (list x r 10)) (defmethod foo ((x string) &key foo) (list x foo 20)) (foo "asdfs" :foo 44) ;=> ("asdfs" 44 20) (foo "aa" :bar 44) ;=> ("aa" NIL 20)