《通链参考手册》


Accessor MACRO-FUNCTION

●语法设定:

macro-function symbol &optional environment => function

(setf (macro-function symbol &optional environment) new-function)

●参数和值:

symbol---a symbol.

environment---an environment object.

function---a macro function or nil.

new-function---a macro function.

●详情:

Determines whether symbol has a function definition as a macro in the specified environment.

If so, the macro expansion function, a function of two arguments, is returned. If symbol has no function definition in the lexical environment environment, or its definition is not a macro, macro-function returns nil.

It is possible for both macro-function and special-operator-p to return true of symbol. The macro definition must be available for use by programs that understand only the standard Common Lisp special forms.

●例子:

 (defmacro macfun (x) '(macro-function 'macfun)) =>  MACFUN 
 (not (macro-function 'macfun)) =>  false 
 (macrolet ((foo (&environment env)
               (if (macro-function 'bar env)
                  ''yes
                  ''no)))
    (list (foo)
          (macrolet ((bar () :beep))
             (foo))))
 
=>  (NO YES)

●受制于:

(setf macro-function), defmacro, and macrolet.

●例外情况:

The consequences are undefined if environment is non-nil in a use of setf of macro-function.

●更多信息:

defmacro,

Section 3.1 (Evaluation)

●说明:

setf can be used with macro-function to install a macro as a symbol's global function definition:

 (setf (macro-function symbol) fn)
The value installed must be a function that accepts two arguments, the entire macro call and an environment, and computes the expansion for that call. Performing this operation causes symbol to have only that macro definition as its global function definition; any previous definition, whether as a macro or as a function, is lost.


X3J13设计清单非标准部分,可查下面章节:


◇首页 § ◎章节目录 § □内容索引 § ○符号索引 § △术语表 § ※设计草案