[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Date: Sun, 21 Jul 1991 05:35 EDT
From: barmar@Think.COM (Barry Margolin)
Date: Mon, 22 Jul 1991 08:27 EDT
From: email@example.com (Steven L. Smith)
Is there way to define a generic function which will specialize
based on the number of arguments passed. For example, I'm trying
to do the following:
Neither Flavors nor CLOS support this; all generic function dispatch is
based on types or equality. Maybe it's possible to do it in CLOS by
using the meta-object protocol to define a new class of generic
functions that implements a different kind of dispatching.
Although the general problem is often quite easily solved without
meta-objects by just re-casting the problem description to involve a
second function, which makes the number of arguments into something that
can be dispatched off of:
(DEFUN FN1 (&REST ARGS) (APPLY #'FN2 (LENGTH ARGS) ARGS))
(DEFGENERIC FN2 (N ...other args...) ...)
The original discussion was about specializing FN1, but if you don't
mind dispatching on FN2 instead, this solution works nicely.
Note that a similar solution has occurred in CLOS with the way DESCRIBE
and DESCRIBE-OBJECT are handled. DESCRIBE is the function the user
calls, but DESCRIBE-OBJECT is the thing you customize.