#

## Issue COERCING-SETF-NAME-TO-FUNCTION Writeup

    Issue:          COERCING-SETF-NAME-TO-FUNCTION
    Reference:      X3J13/92-102, dpANS 12.24
                      COERCE, p.4-30..32
                    X3J13/89-520, Issue FUNCTION-NAME
                    X3J13/88-413, Issue FUNCTION-TYPE
                    X3J13/92-3101, Kim Barrett comment #1
    Category:       ADDITION
    Edit History:   Version 1, 06/15/91, Kim Barrett
                    Version 2, 06/22/91, Kim Barrett (summarize discussion)
                    Version 3, 01/06/93, Kim Barrett (update references)
                    Version 4, 01/06/93, Kim Barrett (name the proposal)
    Status:         Proposal ALL-FUNCTION-NAMES accepted, Mar 1993

    Problem Description:

     COERCE doesn't currently provide a means of converting a SETF function name to
     a function object, as it does for functions named by symbols.  FUNCTION-TYPE
     was written too early to cover this, and FUNCTION-NAME didn't correct it.

    Proposal (COERCING-SETF-NAME-TO-FUNCTION:ALL-FUNCTION-NAMES):

     Change the argument permitted by COERCE when the type argument is FUNCTION to
     treat all function names as it currently treats symbols.  The following change
     to the 12.24 draft is required:

     In the description of the COERCE function, the first paragraph of the section
     for the FUNCTION result-type (p.4-31) says:

        If the \param{result-type} is \typeref{function},
        and \param{object} is any \term{symbol} that is \term{fbound}
        but that is globally defined neither as a \term{macro name} nor as
        a \term{special operator}, then the \param{result} is the
        \term{functional value} of \param{object}.

     Change the occurance of the term \term{symbol} to instead be
     \term{function name}, so that the sentence reads:

        If the \param{result-type} is \typeref{function},
        and \param{object} is any \term{function name} that is \term{fbound}
        but that is globally defined neither as a \term{macro name} nor as
        a \term{special operator}, then the \param{result} is the
        \term{functional value} of \param{object}.

    Editorial Impact:

     Single term change.

    Rationale:

     This corrects an apparent oversight in the FUNCTION-NAME proposal.

    Discussion:

     Moon and others feel that (COERCE symbol 'FUNCTION) is questionable, but that
     it would be better to make a small upwardly compatible change for consistancy
     rather than leaving things inconsistant, and that even worse would be the now
     incompatible change involved in the removal of the coercion of symbols to
     functions.

Copyright 1996-2005, LispWorks Ltd. All rights reserved.