[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Some open issues



    Date: Thu, 29 Oct 87  08:44:13 CST
    From: Patrick H Dussud <DUSSUD%jenner.csc.ti.com@RELAY.CS.NET>

    We said at the Palo Alto meeting (If I remember correctly) that something like 

    (defmethod foo ((a c1) (b c2) &key x )
       ...)

    would result into a method which lambda list is ((a c1) (b c2) &key x)
    (used for the lambda-list congruence computation),
    and a function which lambda list can be (a b &key x &allow-other-keys).
    It is done so because the generic function check the keywords arguments,
    not the method.
    If what I said is correct, 

It is.

			       the question is: When do we change/generate the
    function's lambda list?  Do we generate the final one during the
    macroexpansion of DEFMETHOD or do we change the lambda-list during the
    execution of (make-instance 'standard-method ...)?

It has to be during the macro expansion of defmethod, since the :function
initarg to standard-method (although I don't have any documentation that
says this explicitly) can be a function that has already been compiled
and can't have its lambda-list mucked with.

The documentation on 2-53, 2-54 of how to create generic functions and
methods of your own is pretty unsatisfactory.  It seems like a bit too
much detail to be covering under make-instance, yet it's not really
enough detail to cover all of the issues, like what does the lambda-list
of the :function have to look like?  And what about making ones own
classes?  I think this stuff may have to move into chapter 3 and become
documentation sections of their own for classes standard-method,
standard-class, and standard-generic-function, rather than being
tucked inside make-instance.