Matches

Syntas

Match =
     Source ":" Pattern [ Rest ].

Evaluation

The evaluation of a path S : P R proceeds as follows. The source S is evaluated and a ground expression Ge obtained is matched against the pattern P to produce a sequence of the variants of matching. Then an attempt is made to find the first variant of matching appearing in this sequence such that the evaluation of the rest R succeeds.

If the rest R is an empty delimited path (which always returns an empty ground expression), it may be omitted.

To describe the semantics of matches, we need the following notation. A judgment EnvList,m,St ||- Q => X,St' means that the evaluation of the path Q at the level m with the list of environments EnvList returns X.

     Env,m,St |- Q => Ge,St'
     ----------------------------------
     [Env]^EnvList,m,St ||- Q => Ge,St'


     Env,m,St |- Q => $fail(0),St'
     EnvList,m,St' ||- Q => X,St''
     ----------------------------------
     [Env]^EnvList,m,St ||- Q => X,St''


     Env,m,St |- Q => $fail(k+1),St'
     ------------------------------------------
     [Env]^EnvList,m,St ||- Q => $fail(k+1),St'


     Env,m,St |- Q => $error(Ge),St'
     ------------------------------------------
     [Env]^EnvList,m,St ||- Q => $error(Ge),St'


     [],m,St ||- Q => $fail(0),St.

Now we describe the semantics of matches.

     S : P  =>=>  S : P ,


     Env,0,St |- S => Ge,St'
     Env |- Ge : P => EnvList
     EnvList,m,St' ||- R => X,St''
     -----------------------------
     Env,m,St |- S : P R => X,St''


     Env,0,St |- S => $fail(k),St'
     -----------------------------------
     Env,m,St |- S : P R => $fail(0),St'


     Env,0,St |- S => $error(Ge),St'
     -------------------------------------
     Env,m,St |- S : P R => $error(Ge),St'

Examples

The evaluation of the following path fails, which results in the character string 'CBA' being printed:
    'ABC' : $r e sX e, <Print sX> $fail
Related concepts
Sources
Patterns
Rests