| 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, 1999, 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/control |
|---|
| 7 |
@node Control Structures, Variables, Evaluation, Top |
|---|
| 8 |
@chapter Control Structures |
|---|
| 9 |
@cindex special forms for control structures |
|---|
| 10 |
@cindex control structures |
|---|
| 11 |
|
|---|
| 12 |
A Lisp program consists of expressions or @dfn{forms} (@pxref{Forms}). |
|---|
| 13 |
We control the order of execution of these forms by enclosing them in |
|---|
| 14 |
@dfn{control structures}. Control structures are special forms which |
|---|
| 15 |
control when, whether, or how many times to execute the forms they |
|---|
| 16 |
contain. |
|---|
| 17 |
|
|---|
| 18 |
The simplest order of execution is sequential execution: first form |
|---|
| 19 |
@var{a}, then form @var{b}, and so on. This is what happens when you |
|---|
| 20 |
write several forms in succession in the body of a function, or at top |
|---|
| 21 |
level in a file of Lisp code---the forms are executed in the order |
|---|
| 22 |
written. We call this @dfn{textual order}. For example, if a function |
|---|
| 23 |
body consists of two forms @var{a} and @var{b}, evaluation of the |
|---|
| 24 |
function evaluates first @var{a} and then @var{b}. The result of |
|---|
| 25 |
evaluating @var{b} becomes the value of the function. |
|---|
| 26 |
|
|---|
| 27 |
Explicit control structures make possible an order of execution other |
|---|
| 28 |
than sequential. |
|---|
| 29 |
|
|---|
| 30 |
Emacs Lisp provides several kinds of control structure, including |
|---|
| 31 |
other varieties of sequencing, conditionals, iteration, and (controlled) |
|---|
| 32 |
jumps---all discussed below. The built-in control structures are |
|---|
| 33 |
special forms since their subforms are not necessarily evaluated or not |
|---|
| 34 |
evaluated sequentially. You can use macros to define your own control |
|---|
| 35 |
structure constructs (@pxref{Macros}). |
|---|
| 36 |
|
|---|
| 37 |
@menu |
|---|
| 38 |
* Sequencing:: Evaluation in textual order. |
|---|
| 39 |
* Conditionals:: @code{if}, @code{cond}, @code{when}, @code{unless}. |
|---|
| 40 |
* Combining Conditions:: @code{and}, @code{or}, @code{not}. |
|---|
| 41 |
* Iteration:: @code{while} loops. |
|---|
| 42 |
* Nonlocal Exits:: Jumping out of a sequence. |
|---|
| 43 |
@end menu |
|---|
| 44 |
|
|---|
| 45 |
@node Sequencing |
|---|
| 46 |
@section Sequencing |
|---|
| 47 |
|
|---|
| 48 |
Evaluating forms in the order they appear is the most common way |
|---|
| 49 |
control passes from one form to another. In some contexts, such as in a |
|---|
| 50 |
function body, this happens automatically. Elsewhere you must use a |
|---|
| 51 |
control structure construct to do this: @code{progn}, the simplest |
|---|
| 52 |
control construct of Lisp. |
|---|
| 53 |
|
|---|
| 54 |
A @code{progn} special form looks like this: |
|---|
| 55 |
|
|---|
| 56 |
@example |
|---|
| 57 |
@group |
|---|
| 58 |
(progn @var{a} @var{b} @var{c} @dots{}) |
|---|
| 59 |
@end group |
|---|
| 60 |
@end example |
|---|
| 61 |
|
|---|
| 62 |
@noindent |
|---|
| 63 |
and it says to execute the forms @var{a}, @var{b}, @var{c}, and so on, in |
|---|
| 64 |
that order. These forms are called the @dfn{body} of the @code{progn} form. |
|---|
| 65 |
The value of the last form in the body becomes the value of the entire |
|---|
| 66 |
@code{progn}. @code{(progn)} returns @code{nil}. |
|---|
| 67 |
|
|---|
| 68 |
@cindex implicit @code{progn} |
|---|
| 69 |
In the early days of Lisp, @code{progn} was the only way to execute |
|---|
| 70 |
two or more forms in succession and use the value of the last of them. |
|---|
| 71 |
But programmers found they often needed to use a @code{progn} in the |
|---|
| 72 |
body of a function, where (at that time) only one form was allowed. So |
|---|
| 73 |
the body of a function was made into an ``implicit @code{progn}'': |
|---|
| 74 |
several forms are allowed just as in the body of an actual @code{progn}. |
|---|
| 75 |
Many other control structures likewise contain an implicit @code{progn}. |
|---|
| 76 |
As a result, @code{progn} is not used as much as it was many years ago. |
|---|
| 77 |
It is needed now most often inside an @code{unwind-protect}, @code{and}, |
|---|
| 78 |
@code{or}, or in the @var{then}-part of an @code{if}. |
|---|
| 79 |
|
|---|
| 80 |
@defspec progn forms@dots{} |
|---|
| 81 |
This special form evaluates all of the @var{forms}, in textual |
|---|
| 82 |
order, returning the result of the final form. |
|---|
| 83 |
|
|---|
| 84 |
@example |
|---|
| 85 |
@group |
|---|
| 86 |
(progn (print "The first form") |
|---|
| 87 |
(print "The second form") |
|---|
| 88 |
(print "The third form")) |
|---|
| 89 |
@print{} "The first form" |
|---|
| 90 |
@print{} "The second form" |
|---|
| 91 |
@print{} "The third form" |
|---|
| 92 |
@result{} "The third form" |
|---|
| 93 |
@end group |
|---|
| 94 |
@end example |
|---|
| 95 |
@end defspec |
|---|
| 96 |
|
|---|
| 97 |
Two other control constructs likewise evaluate a series of forms but return |
|---|
| 98 |
a different value: |
|---|
| 99 |
|
|---|
| 100 |
@defspec prog1 form1 forms@dots{} |
|---|
| 101 |
This special form evaluates @var{form1} and all of the @var{forms}, in |
|---|
| 102 |
textual order, returning the result of @var{form1}. |
|---|
| 103 |
|
|---|
| 104 |
@example |
|---|
| 105 |
@group |
|---|
| 106 |
(prog1 (print "The first form") |
|---|
| 107 |
(print "The second form") |
|---|
| 108 |
(print "The third form")) |
|---|
| 109 |
@print{} "The first form" |
|---|
| 110 |
@print{} "The second form" |
|---|
| 111 |
@print{} "The third form" |
|---|
| 112 |
@result{} "The first form" |
|---|
| 113 |
@end group |
|---|
| 114 |
@end example |
|---|
| 115 |
|
|---|
| 116 |
Here is a way to remove the first element from a list in the variable |
|---|
| 117 |
@code{x}, then return the value of that former element: |
|---|
| 118 |
|
|---|
| 119 |
@example |
|---|
| 120 |
(prog1 (car x) (setq x (cdr x))) |
|---|
| 121 |
@end example |
|---|
| 122 |
@end defspec |
|---|
| 123 |
|
|---|
| 124 |
@defspec prog2 form1 form2 forms@dots{} |
|---|
| 125 |
This special form evaluates @var{form1}, @var{form2}, and all of the |
|---|
| 126 |
following @var{forms}, in textual order, returning the result of |
|---|
| 127 |
@var{form2}. |
|---|
| 128 |
|
|---|
| 129 |
@example |
|---|
| 130 |
@group |
|---|
| 131 |
(prog2 (print "The first form") |
|---|
| 132 |
(print "The second form") |
|---|
| 133 |
(print "The third form")) |
|---|
| 134 |
@print{} "The first form" |
|---|
| 135 |
@print{} "The second form" |
|---|
| 136 |
@print{} "The third form" |
|---|
| 137 |
@result{} "The second form" |
|---|
| 138 |
@end group |
|---|
| 139 |
@end example |
|---|
| 140 |
@end defspec |
|---|
| 141 |
|
|---|
| 142 |
@node Conditionals |
|---|
| 143 |
@section Conditionals |
|---|
| 144 |
@cindex conditional evaluation |
|---|
| 145 |
|
|---|
| 146 |
Conditional control structures choose among alternatives. Emacs Lisp |
|---|
| 147 |
has four conditional forms: @code{if}, which is much the same as in |
|---|
| 148 |
other languages; @code{when} and @code{unless}, which are variants of |
|---|
| 149 |
@code{if}; and @code{cond}, which is a generalized case statement. |
|---|
| 150 |
|
|---|
| 151 |
@defspec if condition then-form else-forms@dots{} |
|---|
| 152 |
@code{if} chooses between the @var{then-form} and the @var{else-forms} |
|---|
| 153 |
based on the value of @var{condition}. If the evaluated @var{condition} is |
|---|
| 154 |
non-@code{nil}, @var{then-form} is evaluated and the result returned. |
|---|
| 155 |
Otherwise, the @var{else-forms} are evaluated in textual order, and the |
|---|
| 156 |
value of the last one is returned. (The @var{else} part of @code{if} is |
|---|
| 157 |
an example of an implicit @code{progn}. @xref{Sequencing}.) |
|---|
| 158 |
|
|---|
| 159 |
If @var{condition} has the value @code{nil}, and no @var{else-forms} are |
|---|
| 160 |
given, @code{if} returns @code{nil}. |
|---|
| 161 |
|
|---|
| 162 |
@code{if} is a special form because the branch that is not selected is |
|---|
| 163 |
never evaluated---it is ignored. Thus, in the example below, |
|---|
| 164 |
@code{true} is not printed because @code{print} is never called. |
|---|
| 165 |
|
|---|
| 166 |
@example |
|---|
| 167 |
@group |
|---|
| 168 |
(if nil |
|---|
| 169 |
(print 'true) |
|---|
| 170 |
'very-false) |
|---|
| 171 |
@result{} very-false |
|---|
| 172 |
@end group |
|---|
| 173 |
@end example |
|---|
| 174 |
@end defspec |
|---|
| 175 |
|
|---|
| 176 |
@defmac when condition then-forms@dots{} |
|---|
| 177 |
This is a variant of @code{if} where there are no @var{else-forms}, |
|---|
| 178 |
and possibly several @var{then-forms}. In particular, |
|---|
| 179 |
|
|---|
| 180 |
@example |
|---|
| 181 |
(when @var{condition} @var{a} @var{b} @var{c}) |
|---|
| 182 |
@end example |
|---|
| 183 |
|
|---|
| 184 |
@noindent |
|---|
| 185 |
is entirely equivalent to |
|---|
| 186 |
|
|---|
| 187 |
@example |
|---|
| 188 |
(if @var{condition} (progn @var{a} @var{b} @var{c}) nil) |
|---|
| 189 |
@end example |
|---|
| 190 |
@end defmac |
|---|
| 191 |
|
|---|
| 192 |
@defmac unless condition forms@dots{} |
|---|
| 193 |
This is a variant of @code{if} where there is no @var{then-form}: |
|---|
| 194 |
|
|---|
| 195 |
@example |
|---|
| 196 |
(unless @var{condition} @var{a} @var{b} @var{c}) |
|---|
| 197 |
@end example |
|---|
| 198 |
|
|---|
| 199 |
@noindent |
|---|
| 200 |
is entirely equivalent to |
|---|
| 201 |
|
|---|
| 202 |
@example |
|---|
| 203 |
(if @var{condition} nil |
|---|
| 204 |
@var{a} @var{b} @var{c}) |
|---|
| 205 |
@end example |
|---|
| 206 |
@end defmac |
|---|
| 207 |
|
|---|
| 208 |
@defspec cond clause@dots{} |
|---|
| 209 |
@code{cond} chooses among an arbitrary number of alternatives. Each |
|---|
| 210 |
@var{clause} in the @code{cond} must be a list. The @sc{car} of this |
|---|
| 211 |
list is the @var{condition}; the remaining elements, if any, the |
|---|
| 212 |
@var{body-forms}. Thus, a clause looks like this: |
|---|
| 213 |
|
|---|
| 214 |
@example |
|---|
| 215 |
(@var{condition} @var{body-forms}@dots{}) |
|---|
| 216 |
@end example |
|---|
| 217 |
|
|---|
| 218 |
@code{cond} tries the clauses in textual order, by evaluating the |
|---|
| 219 |
@var{condition} of each clause. If the value of @var{condition} is |
|---|
| 220 |
non-@code{nil}, the clause ``succeeds''; then @code{cond} evaluates its |
|---|
| 221 |
@var{body-forms}, and the value of the last of @var{body-forms} becomes |
|---|
| 222 |
the value of the @code{cond}. The remaining clauses are ignored. |
|---|
| 223 |
|
|---|
| 224 |
If the value of @var{condition} is @code{nil}, the clause ``fails,'' so |
|---|
| 225 |
the @code{cond} moves on to the following clause, trying its |
|---|
| 226 |
@var{condition}. |
|---|
| 227 |
|
|---|
| 228 |
If every @var{condition} evaluates to @code{nil}, so that every clause |
|---|
| 229 |
fails, @code{cond} returns @code{nil}. |
|---|
| 230 |
|
|---|
| 231 |
A clause may also look like this: |
|---|
| 232 |
|
|---|
| 233 |
@example |
|---|
| 234 |
(@var{condition}) |
|---|
| 235 |
@end example |
|---|
| 236 |
|
|---|
| 237 |
@noindent |
|---|
| 238 |
Then, if @var{condition} is non-@code{nil} when tested, the value of |
|---|
| 239 |
@var{condition} becomes the value of the @code{cond} form. |
|---|
| 240 |
|
|---|
| 241 |
The following example has four clauses, which test for the cases where |
|---|
| 242 |
the value of @code{x} is a number, string, buffer and symbol, |
|---|
| 243 |
respectively: |
|---|
| 244 |
|
|---|
| 245 |
@example |
|---|
| 246 |
@group |
|---|
| 247 |
(cond ((numberp x) x) |
|---|
| 248 |
((stringp x) x) |
|---|
| 249 |
((bufferp x) |
|---|
| 250 |
(setq temporary-hack x) ; @r{multiple body-forms} |
|---|
| 251 |
(buffer-name x)) ; @r{in one clause} |
|---|
| 252 |
((symbolp x) (symbol-value x))) |
|---|
| 253 |
@end group |
|---|
| 254 |
@end example |
|---|
| 255 |
|
|---|
| 256 |
Often we want to execute the last clause whenever none of the previous |
|---|
| 257 |
clauses was successful. To do this, we use @code{t} as the |
|---|
| 258 |
@var{condition} of the last clause, like this: @code{(t |
|---|
| 259 |
@var{body-forms})}. The form @code{t} evaluates to @code{t}, which is |
|---|
| 260 |
never @code{nil}, so this clause never fails, provided the @code{cond} |
|---|
| 261 |
gets to it at all. |
|---|
| 262 |
|
|---|
| 263 |
For example, |
|---|
| 264 |
|
|---|
| 265 |
@example |
|---|
| 266 |
@group |
|---|
| 267 |
(setq a 5) |
|---|
| 268 |
(cond ((eq a 'hack) 'foo) |
|---|
| 269 |
(t "default")) |
|---|
| 270 |
@result{} "default" |
|---|
| 271 |
@end group |
|---|
| 272 |
@end example |
|---|
| 273 |
|
|---|
| 274 |
@noindent |
|---|
| 275 |
This @code{cond} expression returns @code{foo} if the value of @code{a} |
|---|
| 276 |
is @code{hack}, and returns the string @code{"default"} otherwise. |
|---|
| 277 |
@end defspec |
|---|
| 278 |
|
|---|
| 279 |
Any conditional construct can be expressed with @code{cond} or with |
|---|
| 280 |
@code{if}. Therefore, the choice between them is a matter of style. |
|---|
| 281 |
For example: |
|---|
| 282 |
|
|---|
| 283 |
@example |
|---|
| 284 |
@group |
|---|
| 285 |
(if @var{a} @var{b} @var{c}) |
|---|
| 286 |
@equiv{} |
|---|
| 287 |
(cond (@var{a} @var{b}) (t @var{c})) |
|---|
| 288 |
@end group |
|---|
| 289 |
@end example |
|---|
| 290 |
|
|---|
| 291 |
@node Combining Conditions |
|---|
| 292 |
@section Constructs for Combining Conditions |
|---|
| 293 |
|
|---|
| 294 |
This section describes three constructs that are often used together |
|---|
| 295 |
with @code{if} and @code{cond} to express complicated conditions. The |
|---|
| 296 |
constructs @code{and} and @code{or} can also be used individually as |
|---|
| 297 |
kinds of multiple conditional constructs. |
|---|
| 298 |
|
|---|
| 299 |
@defun not condition |
|---|
| 300 |
This function tests for the falsehood of @var{condition}. It returns |
|---|
| 301 |
@code{t} if @var{condition} is @code{nil}, and @code{nil} otherwise. |
|---|
| 302 |
The function @code{not} is identical to @code{null}, and we recommend |
|---|
| 303 |
using the name @code{null} if you are testing for an empty list. |
|---|
| 304 |
@end defun |
|---|
| 305 |
|
|---|
| 306 |
@defspec and conditions@dots{} |
|---|
| 307 |
The @code{and} special form tests whether all the @var{conditions} are |
|---|
| 308 |
true. It works by evaluating the @var{conditions} one by one in the |
|---|
| 309 |
order written. |
|---|
| 310 |
|
|---|
| 311 |
If any of the @var{conditions} evaluates to @code{nil}, then the result |
|---|
| 312 |
of the @code{and} must be @code{nil} regardless of the remaining |
|---|
| 313 |
@var{conditions}; so @code{and} returns @code{nil} right away, ignoring |
|---|
| 314 |
the remaining @var{conditions}. |
|---|
| 315 |
|
|---|
| 316 |
If all the @var{conditions} turn out non-@code{nil}, then the value of |
|---|
| 317 |
the last of them becomes the value of the @code{and} form. Just |
|---|
| 318 |
@code{(and)}, with no @var{conditions}, returns @code{t}, appropriate |
|---|
| 319 |
because all the @var{conditions} turned out non-@code{nil}. (Think |
|---|
| 320 |
about it; which one did not?) |
|---|
| 321 |
|
|---|
| 322 |
Here is an example. The first condition returns the integer 1, which is |
|---|
| 323 |
not @code{nil}. Similarly, the second condition returns the integer 2, |
|---|
| 324 |
which is not @code{nil}. The third condition is @code{nil}, so the |
|---|
| 325 |
remaining condition is never evaluated. |
|---|
| 326 |
|
|---|
| 327 |
@example |
|---|
| 328 |
@group |
|---|
| 329 |
(and (print 1) (print 2) nil (print 3)) |
|---|
| 330 |
@print{} 1 |
|---|
| 331 |
@print{} 2 |
|---|
| 332 |
@result{} nil |
|---|
| 333 |
@end group |
|---|
| 334 |
@end example |
|---|
| 335 |
|
|---|
| 336 |
Here is a more realistic example of using @code{and}: |
|---|
| 337 |
|
|---|
| 338 |
@example |
|---|
| 339 |
@group |
|---|
| 340 |
(if (and (consp foo) (eq (car foo) 'x)) |
|---|
| 341 |
(message "foo is a list starting with x")) |
|---|
| 342 |
@end group |
|---|
| 343 |
@end example |
|---|
| 344 |
|
|---|
| 345 |
@noindent |
|---|
| 346 |
Note that @code{(car foo)} is not executed if @code{(consp foo)} returns |
|---|
| 347 |
@code{nil}, thus avoiding an error. |
|---|
| 348 |
|
|---|
| 349 |
@code{and} expressions can also be written using either @code{if} or |
|---|
| 350 |
@code{cond}. Here's how: |
|---|
| 351 |
|
|---|
| 352 |
@example |
|---|
| 353 |
@group |
|---|
| 354 |
(and @var{arg1} @var{arg2} @var{arg3}) |
|---|
| 355 |
@equiv{} |
|---|
| 356 |
(if @var{arg1} (if @var{arg2} @var{arg3})) |
|---|
| 357 |
@equiv{} |
|---|
| 358 |
(cond (@var{arg1} (cond (@var{arg2} @var{arg3})))) |
|---|
| 359 |
@end group |
|---|
| 360 |
@end example |
|---|
| 361 |
@end defspec |
|---|
| 362 |
|
|---|
| 363 |
@defspec or conditions@dots{} |
|---|
| 364 |
The @code{or} special form tests whether at least one of the |
|---|
| 365 |
@var{conditions} is true. It works by evaluating all the |
|---|
| 366 |
@var{conditions} one by one in the order written. |
|---|
| 367 |
|
|---|
| 368 |
If any of the @var{conditions} evaluates to a non-@code{nil} value, then |
|---|
| 369 |
the result of the @code{or} must be non-@code{nil}; so @code{or} returns |
|---|
| 370 |
right away, ignoring the remaining @var{conditions}. The value it |
|---|
| 371 |
returns is the non-@code{nil} value of the condition just evaluated. |
|---|
| 372 |
|
|---|
| 373 |
If all the @var{conditions} turn out @code{nil}, then the @code{or} |
|---|
| 374 |
expression returns @code{nil}. Just @code{(or)}, with no |
|---|
| 375 |
@var{conditions}, returns @code{nil}, appropriate because all the |
|---|
| 376 |
@var{conditions} turned out @code{nil}. (Think about it; which one |
|---|
| 377 |
did not?) |
|---|
| 378 |
|
|---|
| 379 |
For example, this expression tests whether @code{x} is either |
|---|
| 380 |
@code{nil} or the integer zero: |
|---|
| 381 |
|
|---|
| 382 |
@example |
|---|
| 383 |
(or (eq x nil) (eq x 0)) |
|---|
| 384 |
@end example |
|---|
| 385 |
|
|---|
| 386 |
Like the @code{and} construct, @code{or} can be written in terms of |
|---|
| 387 |
@code{cond}. For example: |
|---|
| 388 |
|
|---|
| 389 |
@example |
|---|
| 390 |
@group |
|---|
| 391 |
(or @var{arg1} @var{arg2} @var{arg3}) |
|---|
| 392 |
@equiv{} |
|---|
| 393 |
(cond (@var{arg1}) |
|---|
| 394 |
(@var{arg2}) |
|---|
| 395 |
(@var{arg3})) |
|---|
| 396 |
@end group |
|---|
| 397 |
@end example |
|---|
| 398 |
|
|---|
| 399 |
You could almost write @code{or} in terms of @code{if}, but not quite: |
|---|
| 400 |
|
|---|
| 401 |
@example |
|---|
| 402 |
@group |
|---|
| 403 |
(if @var{arg1} @var{arg1} |
|---|
| 404 |
(if @var{arg2} @var{arg2} |
|---|
| 405 |
@var{arg3})) |
|---|
| 406 |
@end group |
|---|
| 407 |
@end example |
|---|
| 408 |
|
|---|
| 409 |
@noindent |
|---|
| 410 |
This is not completely equivalent because it can evaluate @var{arg1} or |
|---|
| 411 |
@var{arg2} twice. By contrast, @code{(or @var{arg1} @var{arg2} |
|---|
| 412 |
@var{arg3})} never evaluates any argument more than once. |
|---|
| 413 |
@end defspec |
|---|
| 414 |
|
|---|
| 415 |
@node Iteration |
|---|
| 416 |
@section Iteration |
|---|
| 417 |
@cindex iteration |
|---|
| 418 |
@cindex recursion |
|---|
| 419 |
|
|---|
| 420 |
Iteration means executing part of a program repetitively. For |
|---|
| 421 |
example, you might want to repeat some computation once for each element |
|---|
| 422 |
of a list, or once for each integer from 0 to @var{n}. You can do this |
|---|
| 423 |
in Emacs Lisp with the special form @code{while}: |
|---|
| 424 |
|
|---|
| 425 |
@defspec while condition forms@dots{} |
|---|
| 426 |
@code{while} first evaluates @var{condition}. If the result is |
|---|
| 427 |
non-@code{nil}, it evaluates @var{forms} in textual order. Then it |
|---|
| 428 |
reevaluates @var{condition}, and if the result is non-@code{nil}, it |
|---|
| 429 |
evaluates @var{forms} again. This process repeats until @var{condition} |
|---|
| 430 |
evaluates to @code{nil}. |
|---|
| 431 |
|
|---|
| 432 |
There is no limit on the number of iterations that may occur. The loop |
|---|
| 433 |
will continue until either @var{condition} evaluates to @code{nil} or |
|---|
| 434 |
until an error or @code{throw} jumps out of it (@pxref{Nonlocal Exits}). |
|---|
| 435 |
|
|---|
| 436 |
The value of a @code{while} form is always @code{nil}. |
|---|
| 437 |
|
|---|
| 438 |
@example |
|---|
| 439 |
@group |
|---|
| 440 |
(setq num 0) |
|---|
| 441 |
@result{} 0 |
|---|
| 442 |
@end group |
|---|
| 443 |
@group |
|---|
| 444 |
(while (< num 4) |
|---|
| 445 |
(princ (format "Iteration %d." num)) |
|---|
| 446 |
(setq num (1+ num))) |
|---|
| 447 |
@print{} Iteration 0. |
|---|
| 448 |
@print{} Iteration 1. |
|---|
| 449 |
@print{} Iteration 2. |
|---|
| 450 |
@print{} Iteration 3. |
|---|
| 451 |
@result{} nil |
|---|
| 452 |
@end group |
|---|
| 453 |
@end example |
|---|
| 454 |
|
|---|
| 455 |
To write a ``repeat...until'' loop, which will execute something on each |
|---|
| 456 |
iteration and then do the end-test, put the body followed by the |
|---|
| 457 |
end-test in a @code{progn} as the first argument of @code{while}, as |
|---|
| 458 |
shown here: |
|---|
| 459 |
|
|---|
| 460 |
@example |
|---|
| 461 |
@group |
|---|
| 462 |
(while (progn |
|---|
| 463 |
(forward-line 1) |
|---|
| 464 |
(not (looking-at "^$")))) |
|---|
| 465 |
@end group |
|---|
| 466 |
@end example |
|---|
| 467 |
|
|---|
| 468 |
@noindent |
|---|
| 469 |
This moves forward one line and continues moving by lines until it |
|---|
| 470 |
reaches an empty line. It is peculiar in that the @code{while} has no |
|---|
| 471 |
body, just the end test (which also does the real work of moving point). |
|---|
| 472 |
@end defspec |
|---|
| 473 |
|
|---|
| 474 |
The @code{dolist} and @code{dotimes} macros provide convenient ways to |
|---|
| 475 |
write two common kinds of loops. |
|---|
| 476 |
|
|---|
| 477 |
@defmac dolist (var list [result]) body@dots{} |
|---|
| 478 |
This construct executes @var{body} once for each element of |
|---|
| 479 |
@var{list}, binding the variable @var{var} locally to hold the current |
|---|
| 480 |
element. Then it returns the value of evaluating @var{result}, or |
|---|
| 481 |
@code{nil} if @var{result} is omitted. For example, here is how you |
|---|
| 482 |
could use @code{dolist} to define the @code{reverse} function: |
|---|
| 483 |
|
|---|
| 484 |
@example |
|---|
| 485 |
(defun reverse (list) |
|---|
| 486 |
(let (value) |
|---|
| 487 |
(dolist (elt list value) |
|---|
| 488 |
(setq value (cons elt value))))) |
|---|
| 489 |
@end example |
|---|
| 490 |
@end defmac |
|---|
| 491 |
|
|---|
| 492 |
@defmac dotimes (var count [result]) body@dots{} |
|---|
| 493 |
This construct executes @var{body} once for each integer from 0 |
|---|
| 494 |
(inclusive) to @var{count} (exclusive), binding the variable @var{var} |
|---|
| 495 |
to the integer for the current iteration. Then it returns the value |
|---|
| 496 |
of evaluating @var{result}, or @code{nil} if @var{result} is omitted. |
|---|
| 497 |
Here is an example of using @code{dotimes} to do something 100 times: |
|---|
| 498 |
|
|---|
| 499 |
@example |
|---|
| 500 |
(dotimes (i 100) |
|---|
| 501 |
(insert "I will not obey absurd orders\n")) |
|---|
| 502 |
@end example |
|---|
| 503 |
@end defmac |
|---|
| 504 |
|
|---|
| 505 |
@node Nonlocal Exits |
|---|
| 506 |
@section Nonlocal Exits |
|---|
| 507 |
@cindex nonlocal exits |
|---|
| 508 |
|
|---|
| 509 |
A @dfn{nonlocal exit} is a transfer of control from one point in a |
|---|
| 510 |
program to another remote point. Nonlocal exits can occur in Emacs Lisp |
|---|
| 511 |
as a result of errors; you can also use them under explicit control. |
|---|
| 512 |
Nonlocal exits unbind all variable bindings made by the constructs being |
|---|
| 513 |
exited. |
|---|
| 514 |
|
|---|
| 515 |
@menu |
|---|
| 516 |
* Catch and Throw:: Nonlocal exits for the program's own purposes. |
|---|
| 517 |
* Examples of Catch:: Showing how such nonlocal exits can be written. |
|---|
| 518 |
* Errors:: How errors are signaled and handled. |
|---|
| 519 |
* Cleanups:: Arranging to run a cleanup form if an error happens. |
|---|
| 520 |
@end menu |
|---|
| 521 |
|
|---|
| 522 |
@node Catch and Throw |
|---|
| 523 |
@subsection Explicit Nonlocal Exits: @code{catch} and @code{throw} |
|---|
| 524 |
|
|---|
| 525 |
Most control constructs affect only the flow of control within the |
|---|
| 526 |
construct itself. The function @code{throw} is the exception to this |
|---|
| 527 |
rule of normal program execution: it performs a nonlocal exit on |
|---|
| 528 |
request. (There are other exceptions, but they are for error handling |
|---|
| 529 |
only.) @code{throw} is used inside a @code{catch}, and jumps back to |
|---|
| 530 |
that @code{catch}. For example: |
|---|
| 531 |
|
|---|
| 532 |
@example |
|---|
| 533 |
@group |
|---|
| 534 |
(defun foo-outer () |
|---|
| 535 |
(catch 'foo |
|---|
| 536 |
(foo-inner))) |
|---|
| 537 |
|
|---|
| 538 |
(defun foo-inner () |
|---|
| 539 |
@dots{} |
|---|
| 540 |
(if x |
|---|
| 541 |
(throw 'foo t)) |
|---|
| 542 |
@dots{}) |
|---|
| 543 |
@end group |
|---|
| 544 |
@end example |
|---|
| 545 |
|
|---|
| 546 |
@noindent |
|---|
| 547 |
The @code{throw} form, if executed, transfers control straight back to |
|---|
| 548 |
the corresponding @code{catch}, which returns immediately. The code |
|---|
| 549 |
following the @code{throw} is not executed. The second argument of |
|---|
| 550 |
@code{throw} is used as the return value of the @code{catch}. |
|---|
| 551 |
|
|---|
| 552 |
The function @code{throw} finds the matching @code{catch} based on the |
|---|
| 553 |
first argument: it searches for a @code{catch} whose first argument is |
|---|
| 554 |
@code{eq} to the one specified in the @code{throw}. If there is more |
|---|
| 555 |
than one applicable @code{catch}, the innermost one takes precedence. |
|---|
| 556 |
Thus, in the above example, the @code{throw} specifies @code{foo}, and |
|---|
| 557 |
the @code{catch} in @code{foo-outer} specifies the same symbol, so that |
|---|
| 558 |
@code{catch} is the applicable one (assuming there is no other matching |
|---|
| 559 |
@code{catch} in between). |
|---|
| 560 |
|
|---|
| 561 |
Executing @code{throw} exits all Lisp constructs up to the matching |
|---|
| 562 |
@code{catch}, including function calls. When binding constructs such as |
|---|
| 563 |
@code{let} or function calls are exited in this way, the bindings are |
|---|
| 564 |
unbound, just as they are when these constructs exit normally |
|---|
| 565 |
(@pxref{Local Variables}). Likewise, @code{throw} restores the buffer |
|---|
| 566 |
and position saved by @code{save-excursion} (@pxref{Excursions}), and |
|---|
| 567 |
the narrowing status saved by @code{save-restriction} and the window |
|---|
| 568 |
selection saved by @code{save-window-excursion} (@pxref{Window |
|---|
| 569 |
Configurations}). It also runs any cleanups established with the |
|---|
| 570 |
@code{unwind-protect} special form when it exits that form |
|---|
| 571 |
(@pxref{Cleanups}). |
|---|
| 572 |
|
|---|
| 573 |
The @code{throw} need not appear lexically within the @code{catch} |
|---|
| 574 |
that it jumps to. It can equally well be called from another function |
|---|
| 575 |
called within the @code{catch}. As long as the @code{throw} takes place |
|---|
| 576 |
chronologically after entry to the @code{catch}, and chronologically |
|---|
| 577 |
before exit from it, it has access to that @code{catch}. This is why |
|---|
| 578 |
@code{throw} can be used in commands such as @code{exit-recursive-edit} |
|---|
| 579 |
that throw back to the editor command loop (@pxref{Recursive Editing}). |
|---|
| 580 |
|
|---|
| 581 |
@cindex CL note---only @code{throw} in Emacs |
|---|
| 582 |
@quotation |
|---|
| 583 |
@b{Common Lisp note:} Most other versions of Lisp, including Common Lisp, |
|---|
| 584 |
have several ways of transferring control nonsequentially: @code{return}, |
|---|
| 585 |
@code{return-from}, and @code{go}, for example. Emacs Lisp has only |
|---|
| 586 |
@code{throw}. |
|---|
| 587 |
@end quotation |
|---|
| 588 |
|
|---|
| 589 |
@defspec catch tag body@dots{} |
|---|
| 590 |
@cindex tag on run time stack |
|---|
| 591 |
@code{catch} establishes a return point for the @code{throw} function. |
|---|
| 592 |
The return point is distinguished from other such return points by |
|---|
| 593 |
@var{tag}, which may be any Lisp object except @code{nil}. The argument |
|---|
| 594 |
@var{tag} is evaluated normally before the return point is established. |
|---|
| 595 |
|
|---|
| 596 |
With the return point in effect, @code{catch} evaluates the forms of the |
|---|
| 597 |
@var{body} in textual order. If the forms execute normally (without |
|---|
| 598 |
error or nonlocal exit) the value of the last body form is returned from |
|---|
| 599 |
the @code{catch}. |
|---|
| 600 |
|
|---|
| 601 |
If a @code{throw} is executed during the execution of @var{body}, |
|---|
| 602 |
specifying the same value @var{tag}, the @code{catch} form exits |
|---|
| 603 |
immediately; the value it returns is whatever was specified as the |
|---|
| 604 |
second argument of @code{throw}. |
|---|
| 605 |
@end defspec |
|---|
| 606 |
|
|---|
| 607 |
@defun throw tag value |
|---|
| 608 |
The purpose of @code{throw} is to return from a return point previously |
|---|
| 609 |
established with @code{catch}. The argument @var{tag} is used to choose |
|---|
| 610 |
among the various existing return points; it must be @code{eq} to the value |
|---|
| 611 |
specified in the @code{catch}. If multiple return points match @var{tag}, |
|---|
| 612 |
the innermost one is used. |
|---|
| 613 |
|
|---|
| 614 |
The argument @var{value} is used as the value to return from that |
|---|
| 615 |
@code{catch}. |
|---|
| 616 |
|
|---|
| 617 |
@kindex no-catch |
|---|
| 618 |
If no return point is in effect with tag @var{tag}, then a @code{no-catch} |
|---|
| 619 |
error is signaled with data @code{(@var{tag} @var{value})}. |
|---|
| 620 |
@end defun |
|---|
| 621 |
|
|---|
| 622 |
@node Examples of Catch |
|---|
| 623 |
@subsection Examples of @code{catch} and @code{throw} |
|---|
| 624 |
|
|---|
| 625 |
One way to use @code{catch} and @code{throw} is to exit from a doubly |
|---|
| 626 |
nested loop. (In most languages, this would be done with a ``go to.'') |
|---|
| 627 |
Here we compute @code{(foo @var{i} @var{j})} for @var{i} and @var{j} |
|---|
| 628 |
varying from 0 to 9: |
|---|
| 629 |
|
|---|
| 630 |
@example |
|---|
| 631 |
@group |
|---|
| 632 |
(defun search-foo () |
|---|
| 633 |
(catch 'loop |
|---|
| 634 |
(let ((i 0)) |
|---|
| 635 |
(while (< i 10) |
|---|
| 636 |
(let ((j 0)) |
|---|
| 637 |
(while (< j 10) |
|---|
| 638 |
(if (foo i j) |
|---|
| 639 |
(throw 'loop (list i j))) |
|---|
| 640 |
(setq j (1+ j)))) |
|---|
| 641 |
(setq i (1+ i)))))) |
|---|
| 642 |
@end group |
|---|
| 643 |
@end example |
|---|
| 644 |
|
|---|
| 645 |
@noindent |
|---|
| 646 |
If @code{foo} ever returns non-@code{nil}, we stop immediately and return a |
|---|
| 647 |
list of @var{i} and @var{j}. If @code{foo} always returns @code{nil}, the |
|---|
| 648 |
@code{catch} returns normally, and the value is @code{nil}, since that |
|---|
| 649 |
is the result of the @code{while}. |
|---|
| 650 |
|
|---|
| 651 |
Here are two tricky examples, slightly different, showing two |
|---|
| 652 |
return points at once. First, two return points with the same tag, |
|---|
| 653 |
@code{hack}: |
|---|
| 654 |
|
|---|
| 655 |
@example |
|---|
| 656 |
@group |
|---|
| 657 |
(defun catch2 (tag) |
|---|
| 658 |
(catch tag |
|---|
| 659 |
(throw 'hack 'yes))) |
|---|
| 660 |
@result{} catch2 |
|---|
| 661 |
@end group |
|---|
| 662 |
|
|---|
| 663 |
@group |
|---|
| 664 |
(catch 'hack |
|---|
| 665 |
(print (catch2 'hack)) |
|---|
| 666 |
'no) |
|---|
| 667 |
@print{} yes |
|---|
| 668 |
@result{} no |
|---|
| 669 |
@end group |
|---|
| 670 |
@end example |
|---|
| 671 |
|
|---|
| 672 |
@noindent |
|---|
| 673 |
Since both return points have tags that match the @code{throw}, it goes to |
|---|
| 674 |
the inner one, the one established in @code{catch2}. Therefore, |
|---|
| 675 |
@code{catch2} returns normally with value @code{yes}, and this value is |
|---|
| 676 |
printed. Finally the second body form in the outer @code{catch}, which is |
|---|
| 677 |
@code{'no}, is evaluated and returned from the outer @code{catch}. |
|---|
| 678 |
|
|---|
| 679 |
Now let's change the argument given to @code{catch2}: |
|---|
| 680 |
|
|---|
| 681 |
@example |
|---|
| 682 |
@group |
|---|
| 683 |
(catch 'hack |
|---|
| 684 |
(print (catch2 'quux)) |
|---|
| 685 |
'no) |
|---|
| 686 |
@result{} yes |
|---|
| 687 |
@end group |
|---|
| 688 |
@end example |
|---|
| 689 |
|
|---|
| 690 |
@noindent |
|---|
| 691 |
We still have two return points, but this time only the outer one has |
|---|
| 692 |
the tag @code{hack}; the inner one has the tag @code{quux} instead. |
|---|
| 693 |
Therefore, @code{throw} makes the outer @code{catch} return the value |
|---|
| 694 |
@code{yes}. The function @code{print} is never called, and the |
|---|
| 695 |
body-form @code{'no} is never evaluated. |
|---|
| 696 |
|
|---|
| 697 |
@node Errors |
|---|
| 698 |
@subsection Errors |
|---|
| 699 |
@cindex errors |
|---|
| 700 |
|
|---|
| 701 |
When Emacs Lisp attempts to evaluate a form that, for some reason, |
|---|
| 702 |
cannot be evaluated, it @dfn{signals} an @dfn{error}. |
|---|
| 703 |
|
|---|
| 704 |
When an error is signaled, Emacs's default reaction is to print an |
|---|
| 705 |
error message and terminate execution of the current command. This is |
|---|
| 706 |
the right thing to do in most cases, such as if you type @kbd{C-f} at |
|---|
| 707 |
the end of the buffer. |
|---|
| 708 |
|
|---|
| 709 |
In complicated programs, simple termination may not be what you want. |
|---|
| 710 |
For example, the program may have made temporary changes in data |
|---|
| 711 |
structures, or created temporary buffers that should be deleted before |
|---|
| 712 |
the program is finished. In such cases, you would use |
|---|
| 713 |
@code{unwind-protect} to establish @dfn{cleanup expressions} to be |
|---|
| 714 |
evaluated in case of error. (@xref{Cleanups}.) Occasionally, you may |
|---|
| 715 |
wish the program to continue execution despite an error in a subroutine. |
|---|
| 716 |
In these cases, you would use @code{condition-case} to establish |
|---|
| 717 |
@dfn{error handlers} to recover control in case of error. |
|---|
| 718 |
|
|---|
| 719 |
Resist the temptation to use error handling to transfer control from |
|---|
| 720 |
one part of the program to another; use @code{catch} and @code{throw} |
|---|
| 721 |
instead. @xref{Catch and Throw}. |
|---|
| 722 |
|
|---|
| 723 |
@menu |
|---|
| 724 |
* Signaling Errors:: How to report an error. |
|---|
| 725 |
* Processing of Errors:: What Emacs does when you report an error. |
|---|
| 726 |
* Handling Errors:: How you can trap errors and continue execution. |
|---|
| 727 |
* Error Symbols:: How errors are classified for trapping them. |
|---|
| 728 |
@end menu |
|---|
| 729 |
|
|---|
| 730 |
@node Signaling Errors |
|---|
| 731 |
@subsubsection How to Signal an Error |
|---|
| 732 |
@cindex signaling errors |
|---|
| 733 |
|
|---|
| 734 |
@dfn{Signaling} an error means beginning error processing. Error |
|---|
| 735 |
processing normally aborts all or part of the running program and |
|---|
| 736 |
returns to a point that is set up to handle the error |
|---|
| 737 |
(@pxref{Processing of Errors}). Here we describe how to signal an |
|---|
| 738 |
error. |
|---|
| 739 |
|
|---|
| 740 |
Most errors are signaled ``automatically'' within Lisp primitives |
|---|
| 741 |
which you call for other purposes, such as if you try to take the |
|---|
| 742 |
@sc{car} of an integer or move forward a character at the end of the |
|---|
| 743 |
buffer. You can also signal errors explicitly with the functions |
|---|
| 744 |
@code{error} and @code{signal}. |
|---|
| 745 |
|
|---|
| 746 |
Quitting, which happens when the user types @kbd{C-g}, is not |
|---|
| 747 |
considered an error, but it is handled almost like an error. |
|---|
| 748 |
@xref{Quitting}. |
|---|
| 749 |
|
|---|
| 750 |
Every error specifies an error message, one way or another. The |
|---|
| 751 |
message should state what is wrong (``File does not exist''), not how |
|---|
| 752 |
things ought to be (``File must exist''). The convention in Emacs |
|---|
| 753 |
Lisp is that error messages should start with a capital letter, but |
|---|
| 754 |
should not end with any sort of punctuation. |
|---|
| 755 |
|
|---|
| 756 |
@defun error format-string &rest args |
|---|
| 757 |
This function signals an error with an error message constructed by |
|---|
| 758 |
applying @code{format} (@pxref{Formatting Strings}) to |
|---|
| 759 |
@var{format-string} and @var{args}. |
|---|
| 760 |
|
|---|
| 761 |
These examples show typical uses of @code{error}: |
|---|
| 762 |
|
|---|
| 763 |
@example |
|---|
| 764 |
@group |
|---|
| 765 |
(error "That is an error -- try something else") |
|---|
| 766 |
@error{} That is an error -- try something else |
|---|
| 767 |
@end group |
|---|
| 768 |
|
|---|
| 769 |
@group |
|---|
| 770 |
(error "You have committed %d errors" 10) |
|---|
| 771 |
@error{} You have committed 10 errors |
|---|
| 772 |
@end group |
|---|
| 773 |
@end example |
|---|
| 774 |
|
|---|
| 775 |
@code{error} works by calling @code{signal} with two arguments: the |
|---|
| 776 |
error symbol @code{error}, and a list containing the string returned by |
|---|
| 777 |
@code{format}. |
|---|
| 778 |
|
|---|
| 779 |
@strong{Warning:} If you want to use your own string as an error message |
|---|
| 780 |
verbatim, don't just write @code{(error @var{string})}. If @var{string} |
|---|
| 781 |
contains @samp{%}, it will be interpreted as a format specifier, with |
|---|
| 782 |
undesirable results. Instead, use @code{(error "%s" @var{string})}. |
|---|
| 783 |
@end defun |
|---|
| 784 |
|
|---|
| 785 |
@defun signal error-symbol data |
|---|
| 786 |
@anchor{Definition of signal} |
|---|
| 787 |
This function signals an error named by @var{error-symbol}. The |
|---|
| 788 |
argument @var{data} is a list of additional Lisp objects relevant to |
|---|
| 789 |
the circumstances of the error. |
|---|
| 790 |
|
|---|
| 791 |
The argument @var{error-symbol} must be an @dfn{error symbol}---a symbol |
|---|
| 792 |
bearing a property @code{error-conditions} whose value is a list of |
|---|
| 793 |
condition names. This is how Emacs Lisp classifies different sorts of |
|---|
| 794 |
errors. @xref{Error Symbols}, for a description of error symbols, |
|---|
| 795 |
error conditions and condition names. |
|---|
| 796 |
|
|---|
| 797 |
If the error is not handled, the two arguments are used in printing |
|---|
| 798 |
the error message. Normally, this error message is provided by the |
|---|
| 799 |
@code{error-message} property of @var{error-symbol}. If @var{data} is |
|---|
| 800 |
non-@code{nil}, this is followed by a colon and a comma separated list |
|---|
| 801 |
of the unevaluated elements of @var{data}. For @code{error}, the |
|---|
| 802 |
error message is the @sc{car} of @var{data} (that must be a string). |
|---|
| 803 |
Subcategories of @code{file-error} are handled specially. |
|---|
| 804 |
|
|---|
| 805 |
The number and significance of the objects in @var{data} depends on |
|---|
| 806 |
@var{error-symbol}. For example, with a @code{wrong-type-arg} error, |
|---|
| 807 |
there should be two objects in the list: a predicate that describes the type |
|---|
| 808 |
that was expected, and the object that failed to fit that type. |
|---|
| 809 |
|
|---|
| 810 |
Both @var{error-symbol} and @var{data} are available to any error |
|---|
| 811 |
handlers that handle the error: @code{condition-case} binds a local |
|---|
| 812 |
variable to a list of the form @code{(@var{error-symbol} .@: |
|---|
| 813 |
@var{data})} (@pxref{Handling Errors}). |
|---|
| 814 |
|
|---|
| 815 |
The function @code{signal} never returns (though in older Emacs versions |
|---|
| 816 |
it could sometimes return). |
|---|
| 817 |
|
|---|
| 818 |
@smallexample |
|---|
| 819 |
@group |
|---|
| 820 |
(signal 'wrong-number-of-arguments '(x y)) |
|---|
| 821 |
@error{} Wrong number of arguments: x, y |
|---|
| 822 |
@end group |
|---|
| 823 |
|
|---|
| 824 |
@group |
|---|
| 825 |
(signal 'no-such-error '("My unknown error condition")) |
|---|
| 826 |
@error{} peculiar error: "My unknown error condition" |
|---|
| 827 |
@end group |
|---|
| 828 |
@end smallexample |
|---|
| 829 |
@end defun |
|---|
| 830 |
|
|---|
| 831 |
@cindex CL note---no continuable errors |
|---|
| 832 |
@quotation |
|---|
| 833 |
@b{Common Lisp note:} Emacs Lisp has nothing like the Common Lisp |
|---|
| 834 |
concept of continuable errors. |
|---|
| 835 |
@end quotation |
|---|
| 836 |
|
|---|
| 837 |
@node Processing of Errors |
|---|
| 838 |
@subsubsection How Emacs Processes Errors |
|---|
| 839 |
|
|---|
| 840 |
When an error is signaled, @code{signal} searches for an active |
|---|
| 841 |
@dfn{handler} for the error. A handler is a sequence of Lisp |
|---|
| 842 |
expressions designated to be executed if an error happens in part of the |
|---|
| 843 |
Lisp program. If the error has an applicable handler, the handler is |
|---|
| 844 |
executed, and control resumes following the handler. The handler |
|---|
| 845 |
executes in the environment of the @code{condition-case} that |
|---|
| 846 |
established it; all functions called within that @code{condition-case} |
|---|
| 847 |
have already been exited, and the handler cannot return to them. |
|---|
| 848 |
|
|---|
| 849 |
If there is no applicable handler for the error, it terminates the |
|---|
| 850 |
current command and returns control to the editor command loop. (The |
|---|
| 851 |
command loop has an implicit handler for all kinds of errors.) The |
|---|
| 852 |
command loop's handler uses the error symbol and associated data to |
|---|
| 853 |
print an error message. You can use the variable |
|---|
| 854 |
@code{command-error-function} to control how this is done: |
|---|
| 855 |
|
|---|
| 856 |
@defvar command-error-function |
|---|
| 857 |
This variable, if non-@code{nil}, specifies a function to use to |
|---|
| 858 |
handle errors that return control to the Emacs command loop. The |
|---|
| 859 |
function should take three arguments: @var{data}, a list of the same |
|---|
| 860 |
form that @code{condition-case} would bind to its variable; |
|---|
| 861 |
@var{context}, a string describing the situation in which the error |
|---|
| 862 |
occurred, or (more often) @code{nil}; and @var{caller}, the Lisp |
|---|
| 863 |
function which called the primitive that signaled the error. |
|---|
| 864 |
@end defvar |
|---|
| 865 |
|
|---|
| 866 |
@cindex @code{debug-on-error} use |
|---|
| 867 |
An error that has no explicit handler may call the Lisp debugger. The |
|---|
| 868 |
debugger is enabled if the variable @code{debug-on-error} (@pxref{Error |
|---|
| 869 |
Debugging}) is non-@code{nil}. Unlike error handlers, the debugger runs |
|---|
| 870 |
in the environment of the error, so that you can examine values of |
|---|
| 871 |
variables precisely as they were at the time of the error. |
|---|
| 872 |
|
|---|
| 873 |
@node Handling Errors |
|---|
| 874 |
@subsubsection Writing Code to Handle Errors |
|---|
| 875 |
@cindex error handler |
|---|
| 876 |
@cindex handling errors |
|---|
| 877 |
|
|---|
| 878 |
The usual effect of signaling an error is to terminate the command |
|---|
| 879 |
that is running and return immediately to the Emacs editor command loop. |
|---|
| 880 |
You can arrange to trap errors occurring in a part of your program by |
|---|
| 881 |
establishing an error handler, with the special form |
|---|
| 882 |
@code{condition-case}. A simple example looks like this: |
|---|
| 883 |
|
|---|
| 884 |
@example |
|---|
| 885 |
@group |
|---|
| 886 |
(condition-case nil |
|---|
| 887 |
(delete-file filename) |
|---|
| 888 |
(error nil)) |
|---|
| 889 |
@end group |
|---|
| 890 |
@end example |
|---|
| 891 |
|
|---|
| 892 |
@noindent |
|---|
| 893 |
This deletes the file named @var{filename}, catching any error and |
|---|
| 894 |
returning @code{nil} if an error occurs. |
|---|
| 895 |
|
|---|
| 896 |
The second argument of @code{condition-case} is called the |
|---|
| 897 |
@dfn{protected form}. (In the example above, the protected form is a |
|---|
| 898 |
call to @code{delete-file}.) The error handlers go into effect when |
|---|
| 899 |
this form begins execution and are deactivated when this form returns. |
|---|
| 900 |
They remain in effect for all the intervening time. In particular, they |
|---|
| 901 |
are in effect during the execution of functions called by this form, in |
|---|
| 902 |
their subroutines, and so on. This is a good thing, since, strictly |
|---|
| 903 |
speaking, errors can be signaled only by Lisp primitives (including |
|---|
| 904 |
@code{signal} and @code{error}) called by the protected form, not by the |
|---|
| 905 |
protected form itself. |
|---|
| 906 |
|
|---|
| 907 |
The arguments after the protected form are handlers. Each handler |
|---|
| 908 |
lists one or more @dfn{condition names} (which are symbols) to specify |
|---|
| 909 |
which errors it will handle. The error symbol specified when an error |
|---|
| 910 |
is signaled also defines a list of condition names. A handler applies |
|---|
| 911 |
to an error if they have any condition names in common. In the example |
|---|
| 912 |
above, there is one handler, and it specifies one condition name, |
|---|
| 913 |
@code{error}, which covers all errors. |
|---|
| 914 |
|
|---|
| 915 |
The search for an applicable handler checks all the established handlers |
|---|
| 916 |
starting with the most recently established one. Thus, if two nested |
|---|
| 917 |
@code{condition-case} forms offer to handle the same error, the inner of |
|---|
| 918 |
the two gets to handle it. |
|---|
| 919 |
|
|---|
| 920 |
If an error is handled by some @code{condition-case} form, this |
|---|
| 921 |
ordinarily prevents the debugger from being run, even if |
|---|
| 922 |
@code{debug-on-error} says this error should invoke the debugger. |
|---|
| 923 |
@xref{Error Debugging}. If you want to be able to debug errors that are |
|---|
| 924 |
caught by a @code{condition-case}, set the variable |
|---|
| 925 |
@code{debug-on-signal} to a non-@code{nil} value. |
|---|
| 926 |
|
|---|
| 927 |
When an error is handled, control returns to the handler. Before this |
|---|
| 928 |
happens, Emacs unbinds all variable bindings made by binding constructs |
|---|
| 929 |
that are being exited and executes the cleanups of all |
|---|
| 930 |
@code{unwind-protect} forms that are exited. Once control arrives at |
|---|
| 931 |
the handler, the body of the handler is executed. |
|---|
| 932 |
|
|---|
| 933 |
After execution of the handler body, execution returns from the |
|---|
| 934 |
@code{condition-case} form. Because the protected form is exited |
|---|
| 935 |
completely before execution of the handler, the handler cannot resume |
|---|
| 936 |
execution at the point of the error, nor can it examine variable |
|---|
| 937 |
bindings that were made within the protected form. All it can do is |
|---|
| 938 |
clean up and proceed. |
|---|
| 939 |
|
|---|
| 940 |
The @code{condition-case} construct is often used to trap errors that |
|---|
| 941 |
are predictable, such as failure to open a file in a call to |
|---|
| 942 |
@code{insert-file-contents}. It is also used to trap errors that are |
|---|
| 943 |
totally unpredictable, such as when the program evaluates an expression |
|---|
| 944 |
read from the user. |
|---|
| 945 |
|
|---|
| 946 |
Error signaling and handling have some resemblance to @code{throw} and |
|---|
| 947 |
@code{catch} (@pxref{Catch and Throw}), but they are entirely separate |
|---|
| 948 |
facilities. An error cannot be caught by a @code{catch}, and a |
|---|
| 949 |
@code{throw} cannot be handled by an error handler (though using |
|---|
| 950 |
@code{throw} when there is no suitable @code{catch} signals an error |
|---|
| 951 |
that can be handled). |
|---|
| 952 |
|
|---|
| 953 |
@defspec condition-case var protected-form handlers@dots{} |
|---|
| 954 |
This special form establishes the error handlers @var{handlers} around |
|---|
| 955 |
the execution of @var{protected-form}. If @var{protected-form} executes |
|---|
| 956 |
without error, the value it returns becomes the value of the |
|---|
| 957 |
@code{condition-case} form; in this case, the @code{condition-case} has |
|---|
| 958 |
no effect. The @code{condition-case} form makes a difference when an |
|---|
| 959 |
error occurs during @var{protected-form}. |
|---|
| 960 |
|
|---|
| 961 |
Each of the @var{handlers} is a list of the form @code{(@var{conditions} |
|---|
| 962 |
@var{body}@dots{})}. Here @var{conditions} is an error condition name |
|---|
| 963 |
to be handled, or a list of condition names; @var{body} is one or more |
|---|
| 964 |
Lisp expressions to be executed when this handler handles an error. |
|---|
| 965 |
Here are examples of handlers: |
|---|
| 966 |
|
|---|
| 967 |
@smallexample |
|---|
| 968 |
@group |
|---|
| 969 |
(error nil) |
|---|
| 970 |
|
|---|
| 971 |
(arith-error (message "Division by zero")) |
|---|
| 972 |
|
|---|
| 973 |
((arith-error file-error) |
|---|
| 974 |
(message |
|---|
| 975 |
"Either division by zero or failure to open a file")) |
|---|
| 976 |
@end group |
|---|
| 977 |
@end smallexample |
|---|
| 978 |
|
|---|
| 979 |
Each error that occurs has an @dfn{error symbol} that describes what |
|---|
| 980 |
kind of error it is. The @code{error-conditions} property of this |
|---|
| 981 |
symbol is a list of condition names (@pxref{Error Symbols}). Emacs |
|---|
| 982 |
searches all the active @code{condition-case} forms for a handler that |
|---|
| 983 |
specifies one or more of these condition names; the innermost matching |
|---|
| 984 |
@code{condition-case} handles the error. Within this |
|---|
| 985 |
@code{condition-case}, the first applicable handler handles the error. |
|---|
| 986 |
|
|---|
| 987 |
After executing the body of the handler, the @code{condition-case} |
|---|
| 988 |
returns normally, using the value of the last form in the handler body |
|---|
| 989 |
as the overall value. |
|---|
| 990 |
|
|---|
| 991 |
@cindex error description |
|---|
| 992 |
The argument @var{var} is a variable. @code{condition-case} does not |
|---|
| 993 |
bind this variable when executing the @var{protected-form}, only when it |
|---|
| 994 |
handles an error. At that time, it binds @var{var} locally to an |
|---|
| 995 |
@dfn{error description}, which is a list giving the particulars of the |
|---|
| 996 |
error. The error description has the form @code{(@var{error-symbol} |
|---|
| 997 |
. @var{data})}. The handler can refer to this list to decide what to |
|---|
| 998 |
do. For example, if the error is for failure opening a file, the file |
|---|
| 999 |
name is the second element of @var{data}---the third element of the |
|---|
| 1000 |
error description. |
|---|
| 1001 |
|
|---|
| 1002 |
If @var{var} is @code{nil}, that means no variable is bound. Then the |
|---|
| 1003 |
error symbol and associated data are not available to the handler. |
|---|
| 1004 |
@end defspec |
|---|
| 1005 |
|
|---|
| 1006 |
@defun error-message-string error-description |
|---|
| 1007 |
This function returns the error message string for a given error |
|---|
| 1008 |
descriptor. It is useful if you want to handle an error by printing the |
|---|
| 1009 |
usual error message for that error. @xref{Definition of signal}. |
|---|
| 1010 |
@end defun |
|---|
| 1011 |
|
|---|
| 1012 |
@cindex @code{arith-error} example |
|---|
| 1013 |
Here is an example of using @code{condition-case} to handle the error |
|---|
| 1014 |
that results from dividing by zero. The handler displays the error |
|---|
| 1015 |
message (but without a beep), then returns a very large number. |
|---|
| 1016 |
|
|---|
| 1017 |
@smallexample |
|---|
| 1018 |
@group |
|---|
| 1019 |
(defun safe-divide (dividend divisor) |
|---|
| 1020 |
(condition-case err |
|---|
| 1021 |
;; @r{Protected form.} |
|---|
| 1022 |
(/ dividend divisor) |
|---|
| 1023 |
@end group |
|---|
| 1024 |
@group |
|---|
| 1025 |
;; @r{The handler.} |
|---|
| 1026 |
(arith-error ; @r{Condition.} |
|---|
| 1027 |
;; @r{Display the usual message for this error.} |
|---|
| 1028 |
(message "%s" (error-message-string err)) |
|---|
| 1029 |
1000000))) |
|---|
| 1030 |
@result{} safe-divide |
|---|
| 1031 |
@end group |
|---|
| 1032 |
|
|---|
| 1033 |
@group |
|---|
| 1034 |
(safe-divide 5 0) |
|---|
| 1035 |
@print{} Arithmetic error: (arith-error) |
|---|
| 1036 |
@result{} 1000000 |
|---|
| 1037 |
@end group |
|---|
| 1038 |
@end smallexample |
|---|
| 1039 |
|
|---|
| 1040 |
@noindent |
|---|
| 1041 |
The handler specifies condition name @code{arith-error} so that it will handle only division-by-zero errors. Other kinds of errors will not be handled, at least not by this @code{condition-case}. Thus, |
|---|
| 1042 |
|
|---|
| 1043 |
@smallexample |
|---|
| 1044 |
@group |
|---|
| 1045 |
(safe-divide nil 3) |
|---|
| 1046 |
@error{} Wrong type argument: number-or-marker-p, nil |
|---|
| 1047 |
@end group |
|---|
| 1048 |
@end smallexample |
|---|
| 1049 |
|
|---|
| 1050 |
Here is a @code{condition-case} that catches all kinds of errors, |
|---|
| 1051 |
including those signaled with @code{error}: |
|---|
| 1052 |
|
|---|
| 1053 |
@smallexample |
|---|
| 1054 |
@group |
|---|
| 1055 |
(setq baz 34) |
|---|
| 1056 |
@result{} 34 |
|---|
| 1057 |
@end group |
|---|
| 1058 |
|
|---|
| 1059 |
@group |
|---|
| 1060 |
(condition-case err |
|---|
| 1061 |
(if (eq baz 35) |
|---|
| 1062 |
t |
|---|
| 1063 |
;; @r{This is a call to the function @code{error}.} |
|---|
| 1064 |
(error "Rats! The variable %s was %s, not 35" 'baz baz)) |
|---|
| 1065 |
;; @r{This is the handler; it is not a form.} |
|---|
| 1066 |
(error (princ (format "The error was: %s" err)) |
|---|
| 1067 |
2)) |
|---|
| 1068 |
@print{} The error was: (error "Rats! The variable baz was 34, not 35") |
|---|
| 1069 |
@result{} 2 |
|---|
| 1070 |
@end group |
|---|
| 1071 |
@end smallexample |
|---|
| 1072 |
|
|---|
| 1073 |
@node Error Symbols |
|---|
| 1074 |
@subsubsection Error Symbols and Condition Names |
|---|
| 1075 |
@cindex error symbol |
|---|
| 1076 |
@cindex error name |
|---|
| 1077 |
@cindex condition name |
|---|
| 1078 |
@cindex user-defined error |
|---|
| 1079 |
@kindex error-conditions |
|---|
| 1080 |
|
|---|
| 1081 |
When you signal an error, you specify an @dfn{error symbol} to specify |
|---|
| 1082 |
the kind of error you have in mind. Each error has one and only one |
|---|
| 1083 |
error symbol to categorize it. This is the finest classification of |
|---|
| 1084 |
errors defined by the Emacs Lisp language. |
|---|
| 1085 |
|
|---|
| 1086 |
These narrow classifications are grouped into a hierarchy of wider |
|---|
| 1087 |
classes called @dfn{error conditions}, identified by @dfn{condition |
|---|
| 1088 |
names}. The narrowest such classes belong to the error symbols |
|---|
| 1089 |
themselves: each error symbol is also a condition name. There are also |
|---|
| 1090 |
condition names for more extensive classes, up to the condition name |
|---|
| 1091 |
@code{error} which takes in all kinds of errors (but not @code{quit}). |
|---|
| 1092 |
Thus, each error has one or more condition names: @code{error}, the |
|---|
| 1093 |
error symbol if that is distinct from @code{error}, and perhaps some |
|---|
| 1094 |
intermediate classifications. |
|---|
| 1095 |
|
|---|
| 1096 |
In order for a symbol to be an error symbol, it must have an |
|---|
| 1097 |
@code{error-conditions} property which gives a list of condition names. |
|---|
| 1098 |
This list defines the conditions that this kind of error belongs to. |
|---|
| 1099 |
(The error symbol itself, and the symbol @code{error}, should always be |
|---|
| 1100 |
members of this list.) Thus, the hierarchy of condition names is |
|---|
| 1101 |
defined by the @code{error-conditions} properties of the error symbols. |
|---|
| 1102 |
Because quitting is not considered an error, the value of the |
|---|
| 1103 |
@code{error-conditions} property of @code{quit} is just @code{(quit)}. |
|---|
| 1104 |
|
|---|
| 1105 |
@cindex peculiar error |
|---|
| 1106 |
In addition to the @code{error-conditions} list, the error symbol |
|---|
| 1107 |
should have an @code{error-message} property whose value is a string to |
|---|
| 1108 |
be printed when that error is signaled but not handled. If the |
|---|
| 1109 |
error symbol has no @code{error-message} property or if the |
|---|
| 1110 |
@code{error-message} property exists, but is not a string, the error |
|---|
| 1111 |
message @samp{peculiar error} is used. @xref{Definition of signal}. |
|---|
| 1112 |
|
|---|
| 1113 |
Here is how we define a new error symbol, @code{new-error}: |
|---|
| 1114 |
|
|---|
| 1115 |
@example |
|---|
| 1116 |
@group |
|---|
| 1117 |
(put 'new-error |
|---|
| 1118 |
'error-conditions |
|---|
| 1119 |
'(error my-own-errors new-error)) |
|---|
| 1120 |
@result{} (error my-own-errors new-error) |
|---|
| 1121 |
@end group |
|---|
| 1122 |
@group |
|---|
| 1123 |
(put 'new-error 'error-message "A new error") |
|---|
| 1124 |
@result{} "A new error" |
|---|
| 1125 |
@end group |
|---|
| 1126 |
@end example |
|---|
| 1127 |
|
|---|
| 1128 |
@noindent |
|---|
| 1129 |
This error has three condition names: @code{new-error}, the narrowest |
|---|
| 1130 |
classification; @code{my-own-errors}, which we imagine is a wider |
|---|
| 1131 |
classification; and @code{error}, which is the widest of all. |
|---|
| 1132 |
|
|---|
| 1133 |
The error string should start with a capital letter but it should |
|---|
| 1134 |
not end with a period. This is for consistency with the rest of Emacs. |
|---|
| 1135 |
|
|---|
| 1136 |
Naturally, Emacs will never signal @code{new-error} on its own; only |
|---|
| 1137 |
an explicit call to @code{signal} (@pxref{Definition of signal}) in |
|---|
| 1138 |
your code can do this: |
|---|
| 1139 |
|
|---|
| 1140 |
@example |
|---|
| 1141 |
@group |
|---|
| 1142 |
(signal 'new-error '(x y)) |
|---|
| 1143 |
@error{} A new error: x, y |
|---|
| 1144 |
@end group |
|---|
| 1145 |
@end example |
|---|
| 1146 |
|
|---|
| 1147 |
This error can be handled through any of the three condition names. |
|---|
| 1148 |
This example handles @code{new-error} and any other errors in the class |
|---|
| 1149 |
@code{my-own-errors}: |
|---|
| 1150 |
|
|---|
| 1151 |
@example |
|---|
| 1152 |
@group |
|---|
| 1153 |
(condition-case foo |
|---|
| 1154 |
(bar nil t) |
|---|
| 1155 |
(my-own-errors nil)) |
|---|
| 1156 |
@end group |
|---|
| 1157 |
@end example |
|---|
| 1158 |
|
|---|
| 1159 |
The significant way that errors are classified is by their condition |
|---|
| 1160 |
names---the names used to match errors with handlers. An error symbol |
|---|
| 1161 |
serves only as a convenient way to specify the intended error message |
|---|
| 1162 |
and list of condition names. It would be cumbersome to give |
|---|
| 1163 |
@code{signal} a list of condition names rather than one error symbol. |
|---|
| 1164 |
|
|---|
| 1165 |
By contrast, using only error symbols without condition names would |
|---|
| 1166 |
seriously decrease the power of @code{condition-case}. Condition names |
|---|
| 1167 |
make it possible to categorize errors at various levels of generality |
|---|
| 1168 |
when you write an error handler. Using error symbols alone would |
|---|
| 1169 |
eliminate all but the narrowest level of classification. |
|---|
| 1170 |
|
|---|
| 1171 |
@xref{Standard Errors}, for a list of all the standard error symbols |
|---|
| 1172 |
and their conditions. |
|---|
| 1173 |
|
|---|
| 1174 |
@node Cleanups |
|---|
| 1175 |
@subsection Cleaning Up from Nonlocal Exits |
|---|
| 1176 |
|
|---|
| 1177 |
The @code{unwind-protect} construct is essential whenever you |
|---|
| 1178 |
temporarily put a data structure in an inconsistent state; it permits |
|---|
| 1179 |
you to make the data consistent again in the event of an error or |
|---|
| 1180 |
throw. (Another more specific cleanup construct that is used only for |
|---|
| 1181 |
changes in buffer contents is the atomic change group; @ref{Atomic |
|---|
| 1182 |
Changes}.) |
|---|
| 1183 |
|
|---|
| 1184 |
@defspec unwind-protect body-form cleanup-forms@dots{} |
|---|
| 1185 |
@cindex cleanup forms |
|---|
| 1186 |
@cindex protected forms |
|---|
| 1187 |
@cindex error cleanup |
|---|
| 1188 |
@cindex unwinding |
|---|
| 1189 |
@code{unwind-protect} executes @var{body-form} with a guarantee that |
|---|
| 1190 |
the @var{cleanup-forms} will be evaluated if control leaves |
|---|
| 1191 |
@var{body-form}, no matter how that happens. @var{body-form} may |
|---|
| 1192 |
complete normally, or execute a @code{throw} out of the |
|---|
| 1193 |
@code{unwind-protect}, or cause an error; in all cases, the |
|---|
| 1194 |
@var{cleanup-forms} will be evaluated. |
|---|
| 1195 |
|
|---|
| 1196 |
If @var{body-form} finishes normally, @code{unwind-protect} returns the |
|---|
| 1197 |
value of @var{body-form}, after it evaluates the @var{cleanup-forms}. |
|---|
| 1198 |
If @var{body-form} does not finish, @code{unwind-protect} does not |
|---|
| 1199 |
return any value in the normal sense. |
|---|
| 1200 |
|
|---|
| 1201 |
Only @var{body-form} is protected by the @code{unwind-protect}. If any |
|---|
| 1202 |
of the @var{cleanup-forms} themselves exits nonlocally (via a |
|---|
| 1203 |
@code{throw} or an error), @code{unwind-protect} is @emph{not} |
|---|
| 1204 |
guaranteed to evaluate the rest of them. If the failure of one of the |
|---|
| 1205 |
@var{cleanup-forms} has the potential to cause trouble, then protect |
|---|
| 1206 |
it with another @code{unwind-protect} around that form. |
|---|
| 1207 |
|
|---|
| 1208 |
The number of currently active @code{unwind-protect} forms counts, |
|---|
| 1209 |
together with the number of local variable bindings, against the limit |
|---|
| 1210 |
@code{max-specpdl-size} (@pxref{Definition of max-specpdl-size,, Local |
|---|
| 1211 |
Variables}). |
|---|
| 1212 |
@end defspec |
|---|
| 1213 |
|
|---|
| 1214 |
For example, here we make an invisible buffer for temporary use, and |
|---|
| 1215 |
make sure to kill it before finishing: |
|---|
| 1216 |
|
|---|
| 1217 |
@smallexample |
|---|
| 1218 |
@group |
|---|
| 1219 |
(save-excursion |
|---|
| 1220 |
(let ((buffer (get-buffer-create " *temp*"))) |
|---|
| 1221 |
(set-buffer buffer) |
|---|
| 1222 |
(unwind-protect |
|---|
| 1223 |
@var{body-form} |
|---|
| 1224 |
(kill-buffer buffer)))) |
|---|
| 1225 |
@end group |
|---|
| 1226 |
@end smallexample |
|---|
| 1227 |
|
|---|
| 1228 |
@noindent |
|---|
| 1229 |
You might think that we could just as well write @code{(kill-buffer |
|---|
| 1230 |
(current-buffer))} and dispense with the variable @code{buffer}. |
|---|
| 1231 |
However, the way shown above is safer, if @var{body-form} happens to |
|---|
| 1232 |
get an error after switching to a different buffer! (Alternatively, |
|---|
| 1233 |
you could write another @code{save-excursion} around @var{body-form}, |
|---|
| 1234 |
to ensure that the temporary buffer becomes current again in time to |
|---|
| 1235 |
kill it.) |
|---|
| 1236 |
|
|---|
| 1237 |
Emacs includes a standard macro called @code{with-temp-buffer} which |
|---|
<