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

Re: generic-function special form

There hasn't been enough conversation about this for us to converge.  In
particular, Moon hasn't replied about whether or not he agrees that
generic-function efunctuates the method-function bodies contained in it.

It seems to me that generic-function is like function.  It causes part
of its body to be efunctuated.  It could be implemented as a macro and
have the same effect, but I don't see why that is a good idea.

To make things simpler for people who may not have the old messages
filed, here are all the messages I have on this topic:

    Date: Fri, 29 Apr 88 14:25 PDT
    From: Gregor.pa

    One of the comments we received was:

	Date: Fri, 15 Apr 88 13:43 PDT
	From: David N Gray <Gray@DSG.csc.ti.com>

	It is not apparent why GENERIC-FUNCTION needs to be a special form
	instead of a macro.

    Gregor said:

    Because Common Lisp doesn't have lambda macros.

    Moon said:

    No, that's wrong, because GENERIC-FUNCTION is not something that can be
    used inside the FUNCTION special form.  In other words, GENERIC-FUNCTION
    evaluates, it doesn't efunctuate.  As far as I can see GENERIC-FUNCTION
    could be a macro that expands into MAKE-INSTANCE <generic-function-class>
    and a bunch of initargs including some that are forms that construct methods.
    I think Gray is right on this one and it's a mistake in the document.
    We should check with RPG, who proposed this.

    Gregor said:

    I am surprised to here that generic-function cannot be used inside the
    function special form.  It doesn't say that in the documentation, and
    since the method bodies are supplied as forms, I think this must
    efunctuate.  It must capture the lexical scope it was used in or else
    what is it worth?

    Date: 30 Apr 88 10:19 PDT
    From: Dick Gabriel <RPG@SAIL.Stanford.EDU>

    On GENERIC-FUNCTION special form:

    It's true I proposed it to be a special form. I did that so it
    would be parallel to FUNCTION. I had even imagined some #<mumble>
    reader macro for it. Unlike FUNCTION, GENERIC-FUNCTION can be a macro
    for MAKE-INSTANCE.  In Qlisp we have a macro called QLAMBDA which is
    like LAMBDA except it cannot be used inside FUNCTION etc.  It turns out
    to be a drag because the differences between how you can use QLAMBDA
    and how you can use LAMBDA seem gratuitous. Similarly, I thought that
    folks would prefer to see GENERIC-FUNCTION be as similar to FUNCTION as

    GENERIC-FUNCTION as a macro can efunctuate what it needs to inside the
    #'lambda's that appear inside the method-forming part of the expansion of
    the macro. I can imagine people making mistakes the first time they write
    this macro.

    Date: Mon, 2 May 88 08:58:20 CDT
    From: Patrick H Dussud <DUSSUD@Jenner.csc.ti.com>

    I think that a macro will work. A macro can return a form that capture
    the lexical environment if it contains lambda forms.

    Date: Mon, 02 May 88 08:54:39 -0700
    From: kempf@Sun.COM

    Arguments on the side of making it a special form are those cited by RPG
    and Gregor, namely that consistency between the way function and 
    generic-function work seems like a good idea (RPG's qlambda example) and
    the need for capturing the lexical environment (Gregor). On the minus
    side is the stated goal of Common Lisp to limit the number of special
    forms and the obvious macroexpansion for generic-function.

    I tend to think that generic-function should be a special form, for
    the arguments cited, and because it seems like a different enough
    piece of functionality to justify going beyond the goal of limiting
    special forms.