HANDBOOK / LANGUAGE REFERENCE MANUAL /

# Patterns

Pattern = IdentUC [":" Pattern]
| Functor ["("[Pattern{ "," Pattern}]")"]
| "_" .

A given value Tau may be matched against a pattern P. This may succeed, thereby defining the variables appearing in P, or fail.

### Variables

If P has the form

- V

where V is a variable, the value of V is defined as Tau and the type of V is the type of the position.

### Terms

If P has the form

- f `(` P1 `,` ... `,` Pn `)`

the matching succeeds if Tau has the form f `(` Tau1 `,` ... `,` Taun `)` and matching Tau1, ..., Taun against P1, ..., Pn succeeds, thereby defining the variables appearing in P1, ..., Pn. Otherwise, the matching fails.

If P appears on a position with type T, the declaration of T must contain a functor specification f `(` T1 `,` ... `,` Tn `)`. P1, ..., Pn appear on positions with types T1, ..., Tn.

|  | Example
    list(X1, list(yellow, X2))
If a value Tau is matched against this pattern (on a position of type List), the matching succeeds if Tau has the form list( Tau1 ,list(yellow, Tau2 )). It defines X1 as a variable of type Color with value Tau1 and X2 as a variable of type List with value Tau2. Otherwise, the matching fails.

### Named Patterns

If P has the form

- V `:` P1

Tau is matched against P1 as if the pattern P had been simply P1. If this succeeds, V is defined as if the pattern P had been simply V.

### Joker

If P has the form

- `_`

(underscore) the matching always succeeds.