REF MACROS                                Titch Le Bek, Rob Duncan, 1986

       COPYRIGHT University of Sussex 1993. All Rights Reserved.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<                             >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<   LISP CONTROL PROCEDURES   >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<                             >>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

This file  briefly  describes  the functions,  variables  and  constants
documented in Chapter  8 of the  standard Common Lisp  guide, which  is:
Common Lisp: The Language (Guy L. Steele, Digital Press, 1984).


-------------------------------------------------
1  A Listing of Functions Variables and Constants
-------------------------------------------------

(compiler-macro-function name &optional env)                  [function]
        Returns the compiler  macro expansion  function associated  with
        name in the lexical enviroment  env (which defaults to the  null
        environment). If no such function exists, nil is returned.


(compiler-macroexpand-1 form &optional env)                   [function]
        If form is a list denoting a call to a function, and a  compiler
        macro  definition  for  that  function  exists  in  the  lexical
        environment env, then two values are returned: the expansion  of
        form, and t. Otherwise, the original form and nil are  returned.
        env defaults to the null  lexical environment. Note that if  the
        function named by the car  of form has been declared  notinline,
        no expansion will take place.


(compiler-macroexpand form &optional env)                     [function]
        Uses compiler-macroexpand-1 to expand  form repeatedly until  it
        is no longer a compiler macro call. The fully expanded result is
        returned with a flag t if  form was originally a compiler  macro
        call, nil otherwise.


(define-compiler-macro name lambda-list                          [macro]
                       {declaration | doc-string}*
                       {form}*)
        Defines a compiler macro  function for name.  The syntax is  the
        same as that of defmacro (q.v.).


(defmacro name lambda-list                                       [macro]
          {declaration | doc-string}*
          {form}*)
        Uses destructuring-bind  to  define a  macro  expander  function
        called name. It has the same syntax as defun. name is the symbol
        whose macro definition is being created; lambda-list is  similar
        in form to a lambda-list and {form}* constitutes the body of the
        expander. name is returned as the value of the defmacro form.


(destructuring-bind lambda-list expression                       [macro]
                    {declaration}*
                    {form}*)
        This macro binds the variables  specified in lambda-list to  the
        corresponding  values  in  the  tree  structure  resulting  from
        evaluating expression, and then executes {form}* as an  implicit
        progn.

        The syntax of  lambda-list is  the same  as that  of a  defmacro
        lambda-list  except  that  the   keyword  &environment  is   not
        permitted.


(macro-function symbol &optional env)                         [function]
        If symbol is defined as a macro in the lexical environment  env,
        the macro expander function associated with symbol is  returned.
        Otherwise nil  is returned.  env defaults  to the  null  lexical
        environment.


(macroexpand form &optional env)                              [function]
        Uses macroexpand-1  to expand  form repeatedly  until it  is  no
        longer a macro call (or symbol macro). The fully expanded result
        is returned with  a flag t  if at least  one expansion has  been
        performed, and nil otherwise.


(macroexpand-1 form &optional env)                            [function]
        If form is  a call to  a macro (within  the lexical  environment
        env), then macroexpand-1 will expand  the macro once and  return
        two values: the expansion  and t. If form  is a symbol that  has
        been given a  symbol macro definition  by symbol-macrolet,  then
        the expansion of that symbol is returned, also with the value t.
        Otherwise, the  two  values  form  and  nil  are  returned.  env
        defaults to the null lexical environment.


*macroexpand-hook*                                            [variable]
        The  value  of  *macroexpand-hook*  is  used  as  the  expansion
        interface hook by macroexpand-1. Its initial value is the symbol
        funcall.


--- C.all/lisp/ref/macros
--- Copyright University of Sussex 1993. All rights reserved.
