  This paper introduces a new metaobject, the generalizer, which complements
the existing specializer metaobject. With the help of examples, we show that
this metaobject allows for the efficient implementation of complex
non-class-based dispatch within the framework of existing metaobject protocols.
We present our modifications to the generic function invocation protocol from
the Art of the Metaobject Protocol; in combination with previous work, this
produces a fully-functional extension of the existing mechanism for method
selection and combination, including support for method combination completely
independent from method selection. We discuss our implementation, within the
SBCL implementation of Common Lisp, and in that context compare the performance
of the new protocol with the standard one, demonstrating that the new protocol
can be tolerably efficient.
