Next: Iteration, Previous: Constructs for Combining Conditions, Up: Control Structures [Contents][Index]
11.4 Pattern-Matching ConditionalAside from the four basic conditional forms, Emacs Lisp also has a pattern-matching conditional form, the pcase
macro, a hybrid of cond
and cl-case
(see Conditionals in Common Lisp Extensions) that overcomes their limitations and introduces the pattern matching programming style. The limitations that pcase
overcomes are:
cond
form chooses among alternatives by evaluating the predicate condition of each of its clauses (see Conditionals). The primary limitation is that variables let-bound in condition are not available to the clause’s body-forms.
Another annoyance (more an inconvenience than a limitation) is that when a series of condition predicates implement equality tests, there is a lot of repeated code. (cl-case
solves this inconvenience.)
cl-case
macro chooses among alternatives by evaluating the equality of its first argument against a set of specific values.
Its limitations are two-fold:
eql
.These render cl-case
unsuitable for strings or compound data structures (e.g., lists or vectors). (cond
doesn’t have these limitations, but it has others, see above.)
Conceptually, the pcase
macro borrows the first-arg focus of cl-case
and the clause-processing flow of cond
, replacing condition with a generalization of the equality test which is a variant of pattern matching, and adding facilities so that you can concisely express a clause’s predicate, and arrange to share let-bindings between a clause’s predicate and body-forms.
The concise expression of a predicate is known as a pattern. When the predicate, called on the value of the first arg, returns non-nil
, we say that “the pattern matches the value” (or sometimes “the value matches the pattern”).
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4