Evaluation
The evaluation of a source \{Q1; Q2; ...
Qn;} proceeds as follows. The paths Q1,
Q2, ..., Qn are evaluated from left to right until the
evaluation of a path succeeds.
More specifically, consider the result of evaluating the path
Qj.
If the result is a ground expression Ge, then Ge is taken
to be the result of the whole construct. If the result is $error(Ge), then
$error(Ge) is the result of the whole construct. If the result is
$fail(k+1), then $fail(k+1) is the result of the whole
construct. And, finally, if the result is $fail(0), this failure is
"caught", i.e. an attempt is made to evaluate the next path. If there exists no next path
(i.e. j=n), the failure $fail(0) is the result of the
whole construct.
An alternative {Q1; Q2; ... Qn;} is
equivalent to the alternative \{Q1; Q2; ... Qn;
$error(Fname "Unexpected fail");}, where Fname is the name of
the function in which the construct appears.
{Q1; Q2; ... Qn;} =>=>
\{Q1; Q2; ... Qn;
$error(Fname "Unexpected fail");}
Fname is the name of the function in which
the construct appears.
Env,m,St |- \{} => $fail(0),St
Env,m,St |- Q1 => Ge,St'
----------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => Ge,St'
Env,m,St |- Q1 => $fail(0),St'
Env,m,St'|- \{Q2; ... Qn;} => X,St''
----------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => X,St''
Env,m,St |- Q1 => $fail(k+1),St'
------------------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => $fail(k+1),St'
Env,m,St |- Q1 => $error(Ge),St'
------------------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => $error(Ge),St'