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.