CLIM mail archive


Question concerning methods

    Date: Fri, 5 Jun 1992 17:49+0200
    From: Oliver Christ <unido!!oli>

    Dear CLIMmers,

    I'm currently building an application interface with CLIM (1.0 & 1.1 on Lucid
    and Allegro). One way to detect whether the execution of some code affects the
    representation of interface objects is to provide :after-methods for those
    application functions which might affect the interface state. So, it is not
    necessary to change the application code itself. I don't know if I made this
    clear, so an example would be:

    in the application code:

      (defmethod create-new-application-object (arg1 arg2)

    in the interface code:

      (defmethod create-new-application-object :after (a1 a2)
	(redisplay-pane ...))

    My problem is now, that the interface code should be independent from the
    application code (and, of course, vice versa), that is, I don't want to "copy"
    the lambda-list of the application code into the after method of the interface
    myself. What I have in mind is a macro which dynamically defines the after
    method and gets the lambda-list from the generic function:

      (define-after-method-for-generic-function 'create-new-application-object

    Now, I haven't found a legal way to get the lambda-list of a generic
    function. In Allegro4.1, it is in the slot "CLOS::PRETTY-ARGLIST", in
    Lucid, it is in the slot "CLOS::LAMBDA-LIST" of the generic function

    My question is whether anybody has found a legal (Ansi-Draft-Conforming...)
    way to get the lambda-list of a generic function object.

Well, this question does not really belong to this mailing list, because it 
is really concerned about plain CLOS.

Anyway, I propose the following:

1. There is a function called CLOS:GENERIC-FUNCTION-LAMBDA-LIST, which is implemented in
the CLOS versions of Symbolics and Lucid (at least >=4.0 for SUNs). Allegro doesn't support
it, I think. BUT if I understood you correctly, you need the lambda list of your methods,
not generic functions, because in generic functions there are no specializers, which
you do have in methods. So watch out for CLOS:METHOD-LAMBDA-LIST or something like that.

2. I would suggest another way of solving the problem. Write a macro named 
DEFINE-METHOD-FOR-INTERFACE or so, that takes a legal lambda list for CLOS methods
and two bodies/forms. The macro then expands to both the normal method and the :after method
you want to have for your UI stuff. In this solution you don't have to cope with
any CLOS details or internals.

Hope that helps a bit or gives you new ideas,

Markus Fischer, MF@SGER.UUCP              Mergenthaler Allee 77-81
Consulting Services                       W-6236 Eschborn, Germany
Symbolics Systemhaus GmbH                 Phone: +49 6196 47220, Fax 481116

Follow-Ups: References:

Main Index | Thread Index