(define-method-combination chain () ((methods (chain . *))) `(progn ,(reduce (lambda (m ms) `(call-method ,m ,(and ms `((make-method ,ms))))) methods :initial-value nil :from-end T))) (defgeneric foo (x) (:method-combination chain)) (defmethod foo chain integerp-filter ((u list)) (remove-if-not #'integerp (call-next-method))) (defmethod foo chain evenp-filter ((u list)) (remove-if-not #'evenp (call-next-method))) (defmethod no-next-method ((gf (eql #'foo)) method &rest args) (apply #'identity args)) (foo '(1 2 3 4 nil t 8)) ;; Error: More than one method of type METHODS with the same specializers.