Node: The Pattern Language, Previous: STKLOS Pattern Matching Facilities, Up: Pattern Matching



The pattern language

The syntax for <pattern> is:

     <pattern> ==>                Matches:
     
       <atom>                    the <atom>.
     | (kwote <atom>)            any expression eq? to <atom>.
     | (and <pat1> ... <patn>)   if all of <pati> match.
     | (or <pat1> ... ...<patn>) if any of <pat1> through <patn> matches.
     | (not <pat>)               if <pat> doesn't match.
     | (? <predicate>)           if <predicate> is true.
     | (<pat1> ... <patn>)       a list of n elements. Here, ... is a
                                 meta-character denoting a finite repetition
                                 of patterns.
     | <pat> ...                 a (possibly empty) repetition
                                 of <pat> in a list.
     | #(<pat> ... <patn>)       a vector of n elements.
     | ?<id>                     anything, and binds id as a variable.
     | ?-                        anything.
     | ??-                       any (possibly empty) repetition of anything
                                 in a list.
     | ???-                      any end of list.
     

Remark: and, or, not, check and kwote must be quoted in order to be treated as literals. This is the only justification for having the kwote pattern since, by convention, any atom which is not a keyword is quoted.

Explanations through examples

Remark: ??- and ... patterns can not appear inside a vector, where you should use ???-: For example, #(a ??- b) or #(a...) are invalid patterns, whereas #(a ???-) is valid and matches any vector whose first element is the atom a.