| 1 |
@c -*-texinfo-*- |
|---|
| 2 |
@c This is part of the GNU Emacs Lisp Reference Manual. |
|---|
| 3 |
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 2001, 2002, |
|---|
| 4 |
@c 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
|---|
| 5 |
@c See the file elisp.texi for copying conditions. |
|---|
| 6 |
@setfilename ../info/macros |
|---|
| 7 |
@node Macros, Customization, Functions, Top |
|---|
| 8 |
@chapter Macros |
|---|
| 9 |
@cindex macros |
|---|
| 10 |
|
|---|
| 11 |
@dfn{Macros} enable you to define new control constructs and other |
|---|
| 12 |
language features. A macro is defined much like a function, but instead |
|---|
| 13 |
of telling how to compute a value, it tells how to compute another Lisp |
|---|
| 14 |
expression which will in turn compute the value. We call this |
|---|
| 15 |
expression the @dfn{expansion} of the macro. |
|---|
| 16 |
|
|---|
| 17 |
Macros can do this because they operate on the unevaluated expressions |
|---|
| 18 |
for the arguments, not on the argument values as functions do. They can |
|---|
| 19 |
therefore construct an expansion containing these argument expressions |
|---|
| 20 |
or parts of them. |
|---|
| 21 |
|
|---|
| 22 |
If you are using a macro to do something an ordinary function could |
|---|
| 23 |
do, just for the sake of speed, consider using an inline function |
|---|
| 24 |
instead. @xref{Inline Functions}. |
|---|
| 25 |
|
|---|
| 26 |
@menu |
|---|
| 27 |
* Simple Macro:: A basic example. |
|---|
| 28 |
* Expansion:: How, when and why macros are expanded. |
|---|
| 29 |
* Compiling Macros:: How macros are expanded by the compiler. |
|---|
| 30 |
* Defining Macros:: How to write a macro definition. |
|---|
| 31 |
* Backquote:: Easier construction of list structure. |
|---|
| 32 |
* Problems with Macros:: Don't evaluate the macro arguments too many times. |
|---|
| 33 |
Don't hide the user's variables. |
|---|
| 34 |
* Indenting Macros:: Specifying how to indent macro calls. |
|---|
| 35 |
@end menu |
|---|
| 36 |
|
|---|
| 37 |
@node Simple Macro |
|---|
| 38 |
@section A Simple Example of a Macro |
|---|
| 39 |
|
|---|
| 40 |
Suppose we would like to define a Lisp construct to increment a |
|---|
| 41 |
variable value, much like the @code{++} operator in C. We would like to |
|---|
| 42 |
write @code{(inc x)} and have the effect of @code{(setq x (1+ x))}. |
|---|
| 43 |
Here's a macro definition that does the job: |
|---|
| 44 |
|
|---|
| 45 |
@findex inc |
|---|
| 46 |
@example |
|---|
| 47 |
@group |
|---|
| 48 |
(defmacro inc (var) |
|---|
| 49 |
(list 'setq var (list '1+ var))) |
|---|
| 50 |
@end group |
|---|
| 51 |
@end example |
|---|
| 52 |
|
|---|
| 53 |
When this is called with @code{(inc x)}, the argument @var{var} is the |
|---|
| 54 |
symbol @code{x}---@emph{not} the @emph{value} of @code{x}, as it would |
|---|
| 55 |
be in a function. The body of the macro uses this to construct the |
|---|
| 56 |
expansion, which is @code{(setq x (1+ x))}. Once the macro definition |
|---|
| 57 |
returns this expansion, Lisp proceeds to evaluate it, thus incrementing |
|---|
| 58 |
@code{x}. |
|---|
| 59 |
|
|---|
| 60 |
@node Expansion |
|---|
| 61 |
@section Expansion of a Macro Call |
|---|
| 62 |
@cindex expansion of macros |
|---|
| 63 |
@cindex macro call |
|---|
| 64 |
|
|---|
| 65 |
A macro call looks just like a function call in that it is a list which |
|---|
| 66 |
starts with the name of the macro. The rest of the elements of the list |
|---|
| 67 |
are the arguments of the macro. |
|---|
| 68 |
|
|---|
| 69 |
Evaluation of the macro call begins like evaluation of a function call |
|---|
| 70 |
except for one crucial difference: the macro arguments are the actual |
|---|
| 71 |
expressions appearing in the macro call. They are not evaluated before |
|---|
| 72 |
they are given to the macro definition. By contrast, the arguments of a |
|---|
| 73 |
function are results of evaluating the elements of the function call |
|---|
| 74 |
list. |
|---|
| 75 |
|
|---|
| 76 |
Having obtained the arguments, Lisp invokes the macro definition just |
|---|
| 77 |
as a function is invoked. The argument variables of the macro are bound |
|---|
| 78 |
to the argument values from the macro call, or to a list of them in the |
|---|
| 79 |
case of a @code{&rest} argument. And the macro body executes and |
|---|
| 80 |
returns its value just as a function body does. |
|---|
| 81 |
|
|---|
| 82 |
The second crucial difference between macros and functions is that the |
|---|
| 83 |
value returned by the macro body is not the value of the macro call. |
|---|
| 84 |
Instead, it is an alternate expression for computing that value, also |
|---|
| 85 |
known as the @dfn{expansion} of the macro. The Lisp interpreter |
|---|
| 86 |
proceeds to evaluate the expansion as soon as it comes back from the |
|---|
| 87 |
macro. |
|---|
| 88 |
|
|---|
| 89 |
Since the expansion is evaluated in the normal manner, it may contain |
|---|
| 90 |
calls to other macros. It may even be a call to the same macro, though |
|---|
| 91 |
this is unusual. |
|---|
| 92 |
|
|---|
| 93 |
You can see the expansion of a given macro call by calling |
|---|
| 94 |
@code{macroexpand}. |
|---|
| 95 |
|
|---|
| 96 |
@defun macroexpand form &optional environment |
|---|
| 97 |
@cindex macro expansion |
|---|
| 98 |
This function expands @var{form}, if it is a macro call. If the result |
|---|
| 99 |
is another macro call, it is expanded in turn, until something which is |
|---|
| 100 |
not a macro call results. That is the value returned by |
|---|
| 101 |
@code{macroexpand}. If @var{form} is not a macro call to begin with, it |
|---|
| 102 |
is returned as given. |
|---|
| 103 |
|
|---|
| 104 |
Note that @code{macroexpand} does not look at the subexpressions of |
|---|
| 105 |
@var{form} (although some macro definitions may do so). Even if they |
|---|
| 106 |
are macro calls themselves, @code{macroexpand} does not expand them. |
|---|
| 107 |
|
|---|
| 108 |
The function @code{macroexpand} does not expand calls to inline functions. |
|---|
| 109 |
Normally there is no need for that, since a call to an inline function is |
|---|
| 110 |
no harder to understand than a call to an ordinary function. |
|---|
| 111 |
|
|---|
| 112 |
If @var{environment} is provided, it specifies an alist of macro |
|---|
| 113 |
definitions that shadow the currently defined macros. Byte compilation |
|---|
| 114 |
uses this feature. |
|---|
| 115 |
|
|---|
| 116 |
@smallexample |
|---|
| 117 |
@group |
|---|
| 118 |
(defmacro inc (var) |
|---|
| 119 |
(list 'setq var (list '1+ var))) |
|---|
| 120 |
@result{} inc |
|---|
| 121 |
@end group |
|---|
| 122 |
|
|---|
| 123 |
@group |
|---|
| 124 |
(macroexpand '(inc r)) |
|---|
| 125 |
@result{} (setq r (1+ r)) |
|---|
| 126 |
@end group |
|---|
| 127 |
|
|---|
| 128 |
@group |
|---|
| 129 |
(defmacro inc2 (var1 var2) |
|---|
| 130 |
(list 'progn (list 'inc var1) (list 'inc var2))) |
|---|
| 131 |
@result{} inc2 |
|---|
| 132 |
@end group |
|---|
| 133 |
|
|---|
| 134 |
@group |
|---|
| 135 |
(macroexpand '(inc2 r s)) |
|---|
| 136 |
@result{} (progn (inc r) (inc s)) ; @r{@code{inc} not expanded here.} |
|---|
| 137 |
@end group |
|---|
| 138 |
@end smallexample |
|---|
| 139 |
@end defun |
|---|
| 140 |
|
|---|
| 141 |
|
|---|
| 142 |
@defun macroexpand-all form &optional environment |
|---|
| 143 |
@code{macroexpand-all} expands macros like @code{macroexpand}, but |
|---|
| 144 |
will look for and expand all macros in @var{form}, not just at the |
|---|
| 145 |
top-level. If no macros are expanded, the return value is @code{eq} |
|---|
| 146 |
to @var{form}. |
|---|
| 147 |
|
|---|
| 148 |
Repeating the example used for @code{macroexpand} above with |
|---|
| 149 |
@code{macroexpand-all}, we see that @code{macroexpand-all} @emph{does} |
|---|
| 150 |
expand the embedded calls to @code{inc}: |
|---|
| 151 |
|
|---|
| 152 |
@smallexample |
|---|
| 153 |
(macroexpand-all '(inc2 r s)) |
|---|
| 154 |
@result{} (progn (setq r (1+ r)) (setq s (1+ s))) |
|---|
| 155 |
@end smallexample |
|---|
| 156 |
|
|---|
| 157 |
@end defun |
|---|
| 158 |
|
|---|
| 159 |
@node Compiling Macros |
|---|
| 160 |
@section Macros and Byte Compilation |
|---|
| 161 |
@cindex byte-compiling macros |
|---|
| 162 |
|
|---|
| 163 |
You might ask why we take the trouble to compute an expansion for a |
|---|
| 164 |
macro and then evaluate the expansion. Why not have the macro body |
|---|
| 165 |
produce the desired results directly? The reason has to do with |
|---|
| 166 |
compilation. |
|---|
| 167 |
|
|---|
| 168 |
When a macro call appears in a Lisp program being compiled, the Lisp |
|---|
| 169 |
compiler calls the macro definition just as the interpreter would, and |
|---|
| 170 |
receives an expansion. But instead of evaluating this expansion, it |
|---|
| 171 |
compiles the expansion as if it had appeared directly in the program. |
|---|
| 172 |
As a result, the compiled code produces the value and side effects |
|---|
| 173 |
intended for the macro, but executes at full compiled speed. This would |
|---|
| 174 |
not work if the macro body computed the value and side effects |
|---|
| 175 |
itself---they would be computed at compile time, which is not useful. |
|---|
| 176 |
|
|---|
| 177 |
In order for compilation of macro calls to work, the macros must |
|---|
| 178 |
already be defined in Lisp when the calls to them are compiled. The |
|---|
| 179 |
compiler has a special feature to help you do this: if a file being |
|---|
| 180 |
compiled contains a @code{defmacro} form, the macro is defined |
|---|
| 181 |
temporarily for the rest of the compilation of that file. To make this |
|---|
| 182 |
feature work, you must put the @code{defmacro} in the same file where it |
|---|
| 183 |
is used, and before its first use. |
|---|
| 184 |
|
|---|
| 185 |
Byte-compiling a file executes any @code{require} calls at top-level |
|---|
| 186 |
in the file. This is in case the file needs the required packages for |
|---|
| 187 |
proper compilation. One way to ensure that necessary macro definitions |
|---|
| 188 |
are available during compilation is to require the files that define |
|---|
| 189 |
them (@pxref{Named Features}). To avoid loading the macro definition files |
|---|
| 190 |
when someone @emph{runs} the compiled program, write |
|---|
| 191 |
@code{eval-when-compile} around the @code{require} calls (@pxref{Eval |
|---|
| 192 |
During Compile}). |
|---|
| 193 |
|
|---|
| 194 |
@node Defining Macros |
|---|
| 195 |
@section Defining Macros |
|---|
| 196 |
|
|---|
| 197 |
A Lisp macro is a list whose @sc{car} is @code{macro}. Its @sc{cdr} should |
|---|
| 198 |
be a function; expansion of the macro works by applying the function |
|---|
| 199 |
(with @code{apply}) to the list of unevaluated argument-expressions |
|---|
| 200 |
from the macro call. |
|---|
| 201 |
|
|---|
| 202 |
It is possible to use an anonymous Lisp macro just like an anonymous |
|---|
| 203 |
function, but this is never done, because it does not make sense to pass |
|---|
| 204 |
an anonymous macro to functionals such as @code{mapcar}. In practice, |
|---|
| 205 |
all Lisp macros have names, and they are usually defined with the |
|---|
| 206 |
special form @code{defmacro}. |
|---|
| 207 |
|
|---|
| 208 |
@defspec defmacro name argument-list body-forms@dots{} |
|---|
| 209 |
@code{defmacro} defines the symbol @var{name} as a macro that looks |
|---|
| 210 |
like this: |
|---|
| 211 |
|
|---|
| 212 |
@example |
|---|
| 213 |
(macro lambda @var{argument-list} . @var{body-forms}) |
|---|
| 214 |
@end example |
|---|
| 215 |
|
|---|
| 216 |
(Note that the @sc{cdr} of this list is a function---a lambda expression.) |
|---|
| 217 |
This macro object is stored in the function cell of @var{name}. The |
|---|
| 218 |
value returned by evaluating the @code{defmacro} form is @var{name}, but |
|---|
| 219 |
usually we ignore this value. |
|---|
| 220 |
|
|---|
| 221 |
The shape and meaning of @var{argument-list} is the same as in a |
|---|
| 222 |
function, and the keywords @code{&rest} and @code{&optional} may be used |
|---|
| 223 |
(@pxref{Argument List}). Macros may have a documentation string, but |
|---|
| 224 |
any @code{interactive} declaration is ignored since macros cannot be |
|---|
| 225 |
called interactively. |
|---|
| 226 |
@end defspec |
|---|
| 227 |
|
|---|
| 228 |
The body of the macro definition can include a @code{declare} form, |
|---|
| 229 |
which can specify how @key{TAB} should indent macro calls, and how to |
|---|
| 230 |
step through them for Edebug. |
|---|
| 231 |
|
|---|
| 232 |
@defmac declare @var{specs}@dots{} |
|---|
| 233 |
@anchor{Definition of declare} |
|---|
| 234 |
A @code{declare} form is used in a macro definition to specify various |
|---|
| 235 |
additional information about it. Two kinds of specification are |
|---|
| 236 |
currently supported: |
|---|
| 237 |
|
|---|
| 238 |
@table @code |
|---|
| 239 |
@item (debug @var{edebug-form-spec}) |
|---|
| 240 |
Specify how to step through macro calls for Edebug. |
|---|
| 241 |
@xref{Instrumenting Macro Calls}. |
|---|
| 242 |
|
|---|
| 243 |
@item (indent @var{indent-spec}) |
|---|
| 244 |
Specify how to indent calls to this macro. @xref{Indenting Macros}, |
|---|
| 245 |
for more details. |
|---|
| 246 |
@end table |
|---|
| 247 |
|
|---|
| 248 |
A @code{declare} form only has its special effect in the body of a |
|---|
| 249 |
@code{defmacro} form if it immediately follows the documentation |
|---|
| 250 |
string, if present, or the argument list otherwise. (Strictly |
|---|
| 251 |
speaking, @emph{several} @code{declare} forms can follow the |
|---|
| 252 |
documentation string or argument list, but since a @code{declare} form |
|---|
| 253 |
can have several @var{specs}, they can always be combined into a |
|---|
| 254 |
single form.) When used at other places in a @code{defmacro} form, or |
|---|
| 255 |
outside a @code{defmacro} form, @code{declare} just returns @code{nil} |
|---|
| 256 |
without evaluating any @var{specs}. |
|---|
| 257 |
@end defmac |
|---|
| 258 |
|
|---|
| 259 |
No macro absolutely needs a @code{declare} form, because that form |
|---|
| 260 |
has no effect on how the macro expands, on what the macro means in the |
|---|
| 261 |
program. It only affects secondary features: indentation and Edebug. |
|---|
| 262 |
|
|---|
| 263 |
@node Backquote |
|---|
| 264 |
@section Backquote |
|---|
| 265 |
@cindex backquote (list substitution) |
|---|
| 266 |
@cindex ` (list substitution) |
|---|
| 267 |
@findex ` |
|---|
| 268 |
|
|---|
| 269 |
Macros often need to construct large list structures from a mixture of |
|---|
| 270 |
constants and nonconstant parts. To make this easier, use the @samp{`} |
|---|
| 271 |
syntax (usually called @dfn{backquote}). |
|---|
| 272 |
|
|---|
| 273 |
Backquote allows you to quote a list, but selectively evaluate |
|---|
| 274 |
elements of that list. In the simplest case, it is identical to the |
|---|
| 275 |
special form @code{quote} (@pxref{Quoting}). For example, these |
|---|
| 276 |
two forms yield identical results: |
|---|
| 277 |
|
|---|
| 278 |
@example |
|---|
| 279 |
@group |
|---|
| 280 |
`(a list of (+ 2 3) elements) |
|---|
| 281 |
@result{} (a list of (+ 2 3) elements) |
|---|
| 282 |
@end group |
|---|
| 283 |
@group |
|---|
| 284 |
'(a list of (+ 2 3) elements) |
|---|
| 285 |
@result{} (a list of (+ 2 3) elements) |
|---|
| 286 |
@end group |
|---|
| 287 |
@end example |
|---|
| 288 |
|
|---|
| 289 |
@findex , @r{(with backquote)} |
|---|
| 290 |
The special marker @samp{,} inside of the argument to backquote |
|---|
| 291 |
indicates a value that isn't constant. Backquote evaluates the |
|---|
| 292 |
argument of @samp{,} and puts the value in the list structure: |
|---|
| 293 |
|
|---|
| 294 |
@example |
|---|
| 295 |
@group |
|---|
| 296 |
(list 'a 'list 'of (+ 2 3) 'elements) |
|---|
| 297 |
@result{} (a list of 5 elements) |
|---|
| 298 |
@end group |
|---|
| 299 |
@group |
|---|
| 300 |
`(a list of ,(+ 2 3) elements) |
|---|
| 301 |
@result{} (a list of 5 elements) |
|---|
| 302 |
@end group |
|---|
| 303 |
@end example |
|---|
| 304 |
|
|---|
| 305 |
Substitution with @samp{,} is allowed at deeper levels of the list |
|---|
| 306 |
structure also. For example: |
|---|
| 307 |
|
|---|
| 308 |
@example |
|---|
| 309 |
@group |
|---|
| 310 |
(defmacro t-becomes-nil (variable) |
|---|
| 311 |
`(if (eq ,variable t) |
|---|
| 312 |
(setq ,variable nil))) |
|---|
| 313 |
@end group |
|---|
| 314 |
|
|---|
| 315 |
@group |
|---|
| 316 |
(t-becomes-nil foo) |
|---|
| 317 |
@equiv{} (if (eq foo t) (setq foo nil)) |
|---|
| 318 |
@end group |
|---|
| 319 |
@end example |
|---|
| 320 |
|
|---|
| 321 |
@findex ,@@ @r{(with backquote)} |
|---|
| 322 |
@cindex splicing (with backquote) |
|---|
| 323 |
You can also @dfn{splice} an evaluated value into the resulting list, |
|---|
| 324 |
using the special marker @samp{,@@}. The elements of the spliced list |
|---|
| 325 |
become elements at the same level as the other elements of the resulting |
|---|
| 326 |
list. The equivalent code without using @samp{`} is often unreadable. |
|---|
| 327 |
Here are some examples: |
|---|
| 328 |
|
|---|
| 329 |
@example |
|---|
| 330 |
@group |
|---|
| 331 |
(setq some-list '(2 3)) |
|---|
| 332 |
@result{} (2 3) |
|---|
| 333 |
@end group |
|---|
| 334 |
@group |
|---|
| 335 |
(cons 1 (append some-list '(4) some-list)) |
|---|
| 336 |
@result{} (1 2 3 4 2 3) |
|---|
| 337 |
@end group |
|---|
| 338 |
@group |
|---|
| 339 |
`(1 ,@@some-list 4 ,@@some-list) |
|---|
| 340 |
@result{} (1 2 3 4 2 3) |
|---|
| 341 |
@end group |
|---|
| 342 |
|
|---|
| 343 |
@group |
|---|
| 344 |
(setq list '(hack foo bar)) |
|---|
| 345 |
@result{} (hack foo bar) |
|---|
| 346 |
@end group |
|---|
| 347 |
@group |
|---|
| 348 |
(cons 'use |
|---|
| 349 |
(cons 'the |
|---|
| 350 |
(cons 'words (append (cdr list) '(as elements))))) |
|---|
| 351 |
@result{} (use the words foo bar as elements) |
|---|
| 352 |
@end group |
|---|
| 353 |
@group |
|---|
| 354 |
`(use the words ,@@(cdr list) as elements) |
|---|
| 355 |
@result{} (use the words foo bar as elements) |
|---|
| 356 |
@end group |
|---|
| 357 |
@end example |
|---|
| 358 |
|
|---|
| 359 |
In old Emacs versions, before version 19.29, @samp{`} used a different |
|---|
| 360 |
syntax which required an extra level of parentheses around the entire |
|---|
| 361 |
backquote construct. Likewise, each @samp{,} or @samp{,@@} substitution |
|---|
| 362 |
required an extra level of parentheses surrounding both the @samp{,} or |
|---|
| 363 |
@samp{,@@} and the following expression. The old syntax required |
|---|
| 364 |
whitespace between the @samp{`}, @samp{,} or @samp{,@@} and the |
|---|
| 365 |
following expression. |
|---|
| 366 |
|
|---|
| 367 |
This syntax is still accepted, for compatibility with old Emacs |
|---|
| 368 |
versions, but support for it will soon disappear. |
|---|
| 369 |
|
|---|
| 370 |
@node Problems with Macros |
|---|
| 371 |
@section Common Problems Using Macros |
|---|
| 372 |
|
|---|
| 373 |
The basic facts of macro expansion have counterintuitive consequences. |
|---|
| 374 |
This section describes some important consequences that can lead to |
|---|
| 375 |
trouble, and rules to follow to avoid trouble. |
|---|
| 376 |
|
|---|
| 377 |
@menu |
|---|
| 378 |
* Wrong Time:: Do the work in the expansion, not in the macro. |
|---|
| 379 |
* Argument Evaluation:: The expansion should evaluate each macro arg once. |
|---|
| 380 |
* Surprising Local Vars:: Local variable bindings in the expansion |
|---|
| 381 |
require special care. |
|---|
| 382 |
* Eval During Expansion:: Don't evaluate them; put them in the expansion. |
|---|
| 383 |
* Repeated Expansion:: Avoid depending on how many times expansion is done. |
|---|
| 384 |
@end menu |
|---|
| 385 |
|
|---|
| 386 |
@node Wrong Time |
|---|
| 387 |
@subsection Wrong Time |
|---|
| 388 |
|
|---|
| 389 |
The most common problem in writing macros is doing some of the |
|---|
| 390 |
real work prematurely---while expanding the macro, rather than in the |
|---|
| 391 |
expansion itself. For instance, one real package had this macro |
|---|
| 392 |
definition: |
|---|
| 393 |
|
|---|
| 394 |
@example |
|---|
| 395 |
(defmacro my-set-buffer-multibyte (arg) |
|---|
| 396 |
(if (fboundp 'set-buffer-multibyte) |
|---|
| 397 |
(set-buffer-multibyte arg))) |
|---|
| 398 |
@end example |
|---|
| 399 |
|
|---|
| 400 |
With this erroneous macro definition, the program worked fine when |
|---|
| 401 |
interpreted but failed when compiled. This macro definition called |
|---|
| 402 |
@code{set-buffer-multibyte} during compilation, which was wrong, and |
|---|
| 403 |
then did nothing when the compiled package was run. The definition |
|---|
| 404 |
that the programmer really wanted was this: |
|---|
| 405 |
|
|---|
| 406 |
@example |
|---|
| 407 |
(defmacro my-set-buffer-multibyte (arg) |
|---|
| 408 |
(if (fboundp 'set-buffer-multibyte) |
|---|
| 409 |
`(set-buffer-multibyte ,arg))) |
|---|
| 410 |
@end example |
|---|
| 411 |
|
|---|
| 412 |
@noindent |
|---|
| 413 |
This macro expands, if appropriate, into a call to |
|---|
| 414 |
@code{set-buffer-multibyte} that will be executed when the compiled |
|---|
| 415 |
program is actually run. |
|---|
| 416 |
|
|---|
| 417 |
@node Argument Evaluation |
|---|
| 418 |
@subsection Evaluating Macro Arguments Repeatedly |
|---|
| 419 |
|
|---|
| 420 |
When defining a macro you must pay attention to the number of times |
|---|
| 421 |
the arguments will be evaluated when the expansion is executed. The |
|---|
| 422 |
following macro (used to facilitate iteration) illustrates the problem. |
|---|
| 423 |
This macro allows us to write a simple ``for'' loop such as one might |
|---|
| 424 |
find in Pascal. |
|---|
| 425 |
|
|---|
| 426 |
@findex for |
|---|
| 427 |
@smallexample |
|---|
| 428 |
@group |
|---|
| 429 |
(defmacro for (var from init to final do &rest body) |
|---|
| 430 |
"Execute a simple \"for\" loop. |
|---|
| 431 |
For example, (for i from 1 to 10 do (print i))." |
|---|
| 432 |
(list 'let (list (list var init)) |
|---|
| 433 |
(cons 'while (cons (list '<= var final) |
|---|
| 434 |
(append body (list (list 'inc var))))))) |
|---|
| 435 |
@end group |
|---|
| 436 |
@result{} for |
|---|
| 437 |
|
|---|
| 438 |
@group |
|---|
| 439 |
(for i from 1 to 3 do |
|---|
| 440 |
(setq square (* i i)) |
|---|
| 441 |
(princ (format "\n%d %d" i square))) |
|---|
| 442 |
@expansion{} |
|---|
| 443 |
@end group |
|---|
| 444 |
@group |
|---|
| 445 |
(let ((i 1)) |
|---|
| 446 |
(while (<= i 3) |
|---|
| 447 |
(setq square (* i i)) |
|---|
| 448 |
(princ (format "\n%d %d" i square)) |
|---|
| 449 |
(inc i))) |
|---|
| 450 |
@end group |
|---|
| 451 |
@group |
|---|
| 452 |
|
|---|
| 453 |
@print{}1 1 |
|---|
| 454 |
@print{}2 4 |
|---|
| 455 |
@print{}3 9 |
|---|
| 456 |
@result{} nil |
|---|
| 457 |
@end group |
|---|
| 458 |
@end smallexample |
|---|
| 459 |
|
|---|
| 460 |
@noindent |
|---|
| 461 |
The arguments @code{from}, @code{to}, and @code{do} in this macro are |
|---|
| 462 |
``syntactic sugar''; they are entirely ignored. The idea is that you |
|---|
| 463 |
will write noise words (such as @code{from}, @code{to}, and @code{do}) |
|---|
| 464 |
in those positions in the macro call. |
|---|
| 465 |
|
|---|
| 466 |
Here's an equivalent definition simplified through use of backquote: |
|---|
| 467 |
|
|---|
| 468 |
@smallexample |
|---|
| 469 |
@group |
|---|
| 470 |
(defmacro for (var from init to final do &rest body) |
|---|
| 471 |
"Execute a simple \"for\" loop. |
|---|
| 472 |
For example, (for i from 1 to 10 do (print i))." |
|---|
| 473 |
`(let ((,var ,init)) |
|---|
| 474 |
(while (<= ,var ,final) |
|---|
| 475 |
,@@body |
|---|
| 476 |
(inc ,var)))) |
|---|
| 477 |
@end group |
|---|
| 478 |
@end smallexample |
|---|
| 479 |
|
|---|
| 480 |
Both forms of this definition (with backquote and without) suffer from |
|---|
| 481 |
the defect that @var{final} is evaluated on every iteration. If |
|---|
| 482 |
@var{final} is a constant, this is not a problem. If it is a more |
|---|
| 483 |
complex form, say @code{(long-complex-calculation x)}, this can slow |
|---|
| 484 |
down the execution significantly. If @var{final} has side effects, |
|---|
| 485 |
executing it more than once is probably incorrect. |
|---|
| 486 |
|
|---|
| 487 |
@cindex macro argument evaluation |
|---|
| 488 |
A well-designed macro definition takes steps to avoid this problem by |
|---|
| 489 |
producing an expansion that evaluates the argument expressions exactly |
|---|
| 490 |
once unless repeated evaluation is part of the intended purpose of the |
|---|
| 491 |
macro. Here is a correct expansion for the @code{for} macro: |
|---|
| 492 |
|
|---|
| 493 |
@smallexample |
|---|
| 494 |
@group |
|---|
| 495 |
(let ((i 1) |
|---|
| 496 |
(max 3)) |
|---|
| 497 |
(while (<= i max) |
|---|
| 498 |
(setq square (* i i)) |
|---|
| 499 |
(princ (format "%d %d" i square)) |
|---|
| 500 |
(inc i))) |
|---|
| 501 |
@end group |
|---|
| 502 |
@end smallexample |
|---|
| 503 |
|
|---|
| 504 |
Here is a macro definition that creates this expansion: |
|---|
| 505 |
|
|---|
| 506 |
@smallexample |
|---|
| 507 |
@group |
|---|
| 508 |
(defmacro for (var from init to final do &rest body) |
|---|
| 509 |
"Execute a simple for loop: (for i from 1 to 10 do (print i))." |
|---|
| 510 |
`(let ((,var ,init) |
|---|
| 511 |
(max ,final)) |
|---|
| 512 |
(while (<= ,var max) |
|---|
| 513 |
,@@body |
|---|
| 514 |
(inc ,var)))) |
|---|
| 515 |
@end group |
|---|
| 516 |
@end smallexample |
|---|
| 517 |
|
|---|
| 518 |
Unfortunately, this fix introduces another problem, |
|---|
| 519 |
described in the following section. |
|---|
| 520 |
|
|---|
| 521 |
@node Surprising Local Vars |
|---|
| 522 |
@subsection Local Variables in Macro Expansions |
|---|
| 523 |
|
|---|
| 524 |
@ifnottex |
|---|
| 525 |
In the previous section, the definition of @code{for} was fixed as |
|---|
| 526 |
follows to make the expansion evaluate the macro arguments the proper |
|---|
| 527 |
number of times: |
|---|
| 528 |
|
|---|
| 529 |
@smallexample |
|---|
| 530 |
@group |
|---|
| 531 |
(defmacro for (var from init to final do &rest body) |
|---|
| 532 |
"Execute a simple for loop: (for i from 1 to 10 do (print i))." |
|---|
| 533 |
@end group |
|---|
| 534 |
@group |
|---|
| 535 |
`(let ((,var ,init) |
|---|
| 536 |
(max ,final)) |
|---|
| 537 |
(while (<= ,var max) |
|---|
| 538 |
,@@body |
|---|
| 539 |
(inc ,var)))) |
|---|
| 540 |
@end group |
|---|
| 541 |
@end smallexample |
|---|
| 542 |
@end ifnottex |
|---|
| 543 |
|
|---|
| 544 |
The new definition of @code{for} has a new problem: it introduces a |
|---|
| 545 |
local variable named @code{max} which the user does not expect. This |
|---|
| 546 |
causes trouble in examples such as the following: |
|---|
| 547 |
|
|---|
| 548 |
@smallexample |
|---|
| 549 |
@group |
|---|
| 550 |
(let ((max 0)) |
|---|
| 551 |
(for x from 0 to 10 do |
|---|
| 552 |
(let ((this (frob x))) |
|---|
| 553 |
(if (< max this) |
|---|
| 554 |
(setq max this))))) |
|---|
| 555 |
@end group |
|---|
| 556 |
@end smallexample |
|---|
| 557 |
|
|---|
| 558 |
@noindent |
|---|
| 559 |
The references to @code{max} inside the body of the @code{for}, which |
|---|
| 560 |
are supposed to refer to the user's binding of @code{max}, really access |
|---|
| 561 |
the binding made by @code{for}. |
|---|
| 562 |
|
|---|
| 563 |
The way to correct this is to use an uninterned symbol instead of |
|---|
| 564 |
@code{max} (@pxref{Creating Symbols}). The uninterned symbol can be |
|---|
| 565 |
bound and referred to just like any other symbol, but since it is |
|---|
| 566 |
created by @code{for}, we know that it cannot already appear in the |
|---|
| 567 |
user's program. Since it is not interned, there is no way the user can |
|---|
| 568 |
put it into the program later. It will never appear anywhere except |
|---|
| 569 |
where put by @code{for}. Here is a definition of @code{for} that works |
|---|
| 570 |
this way: |
|---|
| 571 |
|
|---|
| 572 |
@smallexample |
|---|
| 573 |
@group |
|---|
| 574 |
(defmacro for (var from init to final do &rest body) |
|---|
| 575 |
"Execute a simple for loop: (for i from 1 to 10 do (print i))." |
|---|
| 576 |
(let ((tempvar (make-symbol "max"))) |
|---|
| 577 |
`(let ((,var ,init) |
|---|
| 578 |
(,tempvar ,final)) |
|---|
| 579 |
(while (<= ,var ,tempvar) |
|---|
| 580 |
,@@body |
|---|
| 581 |
(inc ,var))))) |
|---|
| 582 |
@end group |
|---|
| 583 |
@end smallexample |
|---|
| 584 |
|
|---|
| 585 |
@noindent |
|---|
| 586 |
This creates an uninterned symbol named @code{max} and puts it in the |
|---|
| 587 |
expansion instead of the usual interned symbol @code{max} that appears |
|---|
| 588 |
in expressions ordinarily. |
|---|
| 589 |
|
|---|
| 590 |
@node Eval During Expansion |
|---|
| 591 |
@subsection Evaluating Macro Arguments in Expansion |
|---|
| 592 |
|
|---|
| 593 |
Another problem can happen if the macro definition itself |
|---|
| 594 |
evaluates any of the macro argument expressions, such as by calling |
|---|
| 595 |
@code{eval} (@pxref{Eval}). If the argument is supposed to refer to the |
|---|
| 596 |
user's variables, you may have trouble if the user happens to use a |
|---|
| 597 |
variable with the same name as one of the macro arguments. Inside the |
|---|
| 598 |
macro body, the macro argument binding is the most local binding of this |
|---|
| 599 |
variable, so any references inside the form being evaluated do refer to |
|---|
| 600 |
it. Here is an example: |
|---|
| 601 |
|
|---|
| 602 |
@example |
|---|
| 603 |
@group |
|---|
| 604 |
(defmacro foo (a) |
|---|
| 605 |
(list 'setq (eval a) t)) |
|---|
| 606 |
@result{} foo |
|---|
| 607 |
@end group |
|---|
| 608 |
@group |
|---|
| 609 |
(setq x 'b) |
|---|
| 610 |
(foo x) @expansion{} (setq b t) |
|---|
| 611 |
@result{} t ; @r{and @code{b} has been set.} |
|---|
| 612 |
;; @r{but} |
|---|
| 613 |
(setq a 'c) |
|---|
| 614 |
(foo a) @expansion{} (setq a t) |
|---|
| 615 |
@result{} t ; @r{but this set @code{a}, not @code{c}.} |
|---|
| 616 |
|
|---|
| 617 |
@end group |
|---|
| 618 |
@end example |
|---|
| 619 |
|
|---|
| 620 |
It makes a difference whether the user's variable is named @code{a} or |
|---|
| 621 |
@code{x}, because @code{a} conflicts with the macro argument variable |
|---|
| 622 |
@code{a}. |
|---|
| 623 |
|
|---|
| 624 |
Another problem with calling @code{eval} in a macro definition is that |
|---|
| 625 |
it probably won't do what you intend in a compiled program. The |
|---|
| 626 |
byte-compiler runs macro definitions while compiling the program, when |
|---|
| 627 |
the program's own computations (which you might have wished to access |
|---|
| 628 |
with @code{eval}) don't occur and its local variable bindings don't |
|---|
| 629 |
exist. |
|---|
| 630 |
|
|---|
| 631 |
To avoid these problems, @strong{don't evaluate an argument expression |
|---|
| 632 |
while computing the macro expansion}. Instead, substitute the |
|---|
| 633 |
expression into the macro expansion, so that its value will be computed |
|---|
| 634 |
as part of executing the expansion. This is how the other examples in |
|---|
| 635 |
this chapter work. |
|---|
| 636 |
|
|---|
| 637 |
@node Repeated Expansion |
|---|
| 638 |
@subsection How Many Times is the Macro Expanded? |
|---|
| 639 |
|
|---|
| 640 |
Occasionally problems result from the fact that a macro call is |
|---|
| 641 |
expanded each time it is evaluated in an interpreted function, but is |
|---|
| 642 |
expanded only once (during compilation) for a compiled function. If the |
|---|
| 643 |
macro definition has side effects, they will work differently depending |
|---|
| 644 |
on how many times the macro is expanded. |
|---|
| 645 |
|
|---|
| 646 |
Therefore, you should avoid side effects in computation of the |
|---|
| 647 |
macro expansion, unless you really know what you are doing. |
|---|
| 648 |
|
|---|
| 649 |
One special kind of side effect can't be avoided: constructing Lisp |
|---|
| 650 |
objects. Almost all macro expansions include constructed lists; that is |
|---|
| 651 |
the whole point of most macros. This is usually safe; there is just one |
|---|
| 652 |
case where you must be careful: when the object you construct is part of a |
|---|
| 653 |
quoted constant in the macro expansion. |
|---|
| 654 |
|
|---|
| 655 |
If the macro is expanded just once, in compilation, then the object is |
|---|
| 656 |
constructed just once, during compilation. But in interpreted |
|---|
| 657 |
execution, the macro is expanded each time the macro call runs, and this |
|---|
| 658 |
means a new object is constructed each time. |
|---|
| 659 |
|
|---|
| 660 |
In most clean Lisp code, this difference won't matter. It can matter |
|---|
| 661 |
only if you perform side-effects on the objects constructed by the macro |
|---|
| 662 |
definition. Thus, to avoid trouble, @strong{avoid side effects on |
|---|
| 663 |
objects constructed by macro definitions}. Here is an example of how |
|---|
| 664 |
such side effects can get you into trouble: |
|---|
| 665 |
|
|---|
| 666 |
@lisp |
|---|
| 667 |
@group |
|---|
| 668 |
(defmacro empty-object () |
|---|
| 669 |
(list 'quote (cons nil nil))) |
|---|
| 670 |
@end group |
|---|
| 671 |
|
|---|
| 672 |
@group |
|---|
| 673 |
(defun initialize (condition) |
|---|
| 674 |
(let ((object (empty-object))) |
|---|
| 675 |
(if condition |
|---|
| 676 |
(setcar object condition)) |
|---|
| 677 |
object)) |
|---|
| 678 |
@end group |
|---|
| 679 |
@end lisp |
|---|
| 680 |
|
|---|
| 681 |
@noindent |
|---|
| 682 |
If @code{initialize} is interpreted, a new list @code{(nil)} is |
|---|
| 683 |
constructed each time @code{initialize} is called. Thus, no side effect |
|---|
| 684 |
survives between calls. If @code{initialize} is compiled, then the |
|---|
| 685 |
macro @code{empty-object} is expanded during compilation, producing a |
|---|
| 686 |
single ``constant'' @code{(nil)} that is reused and altered each time |
|---|
| 687 |
@code{initialize} is called. |
|---|
| 688 |
|
|---|
| 689 |
One way to avoid pathological cases like this is to think of |
|---|
| 690 |
@code{empty-object} as a funny kind of constant, not as a memory |
|---|
| 691 |
allocation construct. You wouldn't use @code{setcar} on a constant such |
|---|
| 692 |
as @code{'(nil)}, so naturally you won't use it on @code{(empty-object)} |
|---|
| 693 |
either. |
|---|
| 694 |
|
|---|
| 695 |
@node Indenting Macros |
|---|
| 696 |
@section Indenting Macros |
|---|
| 697 |
|
|---|
| 698 |
You can use the @code{declare} form in the macro definition to |
|---|
| 699 |
specify how to @key{TAB} should indent indent calls to the macro. You |
|---|
| 700 |
write it like this: |
|---|
| 701 |
|
|---|
| 702 |
@example |
|---|
| 703 |
(declare (indent @var{indent-spec})) |
|---|
| 704 |
@end example |
|---|
| 705 |
|
|---|
| 706 |
@noindent |
|---|
| 707 |
Here are the possibilities for @var{indent-spec}: |
|---|
| 708 |
|
|---|
| 709 |
@table @asis |
|---|
| 710 |
@item @code{nil} |
|---|
| 711 |
This is the same as no property---use the standard indentation pattern. |
|---|
| 712 |
@item @code{defun} |
|---|
| 713 |
Handle this function like a @samp{def} construct: treat the second |
|---|
| 714 |
line as the start of a @dfn{body}. |
|---|
| 715 |
@item an integer, @var{number} |
|---|
| 716 |
The first @var{number} arguments of the function are |
|---|
| 717 |
@dfn{distinguished} arguments; the rest are considered the body |
|---|
| 718 |
of the expression. A line in the expression is indented according to |
|---|
| 719 |
whether the first argument on it is distinguished or not. If the |
|---|
| 720 |
argument is part of the body, the line is indented @code{lisp-body-indent} |
|---|
| 721 |
more columns than the open-parenthesis starting the containing |
|---|
| 722 |
expression. If the argument is distinguished and is either the first |
|---|
| 723 |
or second argument, it is indented @emph{twice} that many extra columns. |
|---|
| 724 |
If the argument is distinguished and not the first or second argument, |
|---|
| 725 |
the line uses the standard pattern. |
|---|
| 726 |
@item a symbol, @var{symbol} |
|---|
| 727 |
@var{symbol} should be a function name; that function is called to |
|---|
| 728 |
calculate the indentation of a line within this expression. The |
|---|
| 729 |
function receives two arguments: |
|---|
| 730 |
@table @asis |
|---|
| 731 |
@item @var{state} |
|---|
| 732 |
The value returned by @code{parse-partial-sexp} (a Lisp primitive for |
|---|
| 733 |
indentation and nesting computation) when it parses up to the |
|---|
| 734 |
beginning of this line. |
|---|
| 735 |
@item @var{pos} |
|---|
| 736 |
The position at which the line being indented begins. |
|---|
| 737 |
@end table |
|---|
| 738 |
@noindent |
|---|
| 739 |
It should return either a number, which is the number of columns of |
|---|
| 740 |
indentation for that line, or a list whose car is such a number. The |
|---|
| 741 |
difference between returning a number and returning a list is that a |
|---|
| 742 |
number says that all following lines at the same nesting level should |
|---|
| 743 |
be indented just like this one; a list says that following lines might |
|---|
| 744 |
call for different indentations. This makes a difference when the |
|---|
| 745 |
indentation is being computed by @kbd{C-M-q}; if the value is a |
|---|
| 746 |
number, @kbd{C-M-q} need not recalculate indentation for the following |
|---|
| 747 |
lines until the end of the list. |
|---|
| 748 |
@end table |
|---|
| 749 |
|
|---|
| 750 |
@ignore |
|---|
| 751 |
arch-tag: d4cce66d-1047-45c3-bfde-db6719d6e82b |
|---|
| 752 |
@end ignore |
|---|