GNU Info

Info Node: (elisp)Backtracking

(elisp)Backtracking


Next: Specification Examples Prev: Specification List Up: Instrumenting Macro Calls
Enter node , (file) or (file)node

Backtracking in Specifications
..............................

   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 bactracking 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.


automatically generated by info2www version 1.2.2.9