[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
If a specification fails to match at some point, this does not necessarily mean a syntax error will be signaled; instead, backtracking will take place until all alternatives have been exhausted. Eventually every element of the argument list must be matched by some element in the specification, and every required element in the specification must match some argument.
When a syntax error is detected, it might not be reported until much later
after higher-level alternatives have been exhausted, and with the point
positioned further from the real error. But if backtracking is disabled
when an error occurs, it can be reported immediately. Note that
backtracking is also reenabled automatically in several situations; it is
reenabled when a new alternative is established by &optional
,
&rest
, or &or
, or at the start of processing a sublist, group,
or indirect specification. The effect of enabling or disabling backtracking
is limited to the remainder of the level currently being processed and lower
levels.
Backtracking is disabled while matching any of the form specifications (that
is, form
, body
, def-form
, and def-body
). These
specifications will match any form so any error must be in the form itself
rather than at a higher level.
Backtracking is also disabled after successfully matching a quoted symbol or
string specification, since this usually indicates a recognized construct.
But if you have a set of alternative constructs that all begin with the same
symbol, you can usually work around this constraint by factoring the symbol
out of the alternatives, e.g., ["foo" &or [first case] [second case]
...]
.
Most needs are satisfied by these two ways that backtracking is
automatically disabled, but occasionally it is useful to explicitly disable
backtracking by using the gate
specification. This is useful when
you know that no higher alternatives could apply. See the example of the
let
specification.
[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.