2.10.15. РАСПУТЬЯ Источник \{Q1; Q2; ... Qn;} означает, что следует вычислять тропы Q1, Q2, ..., Qn слева направо, пока не удастся найти тропу, вычисление которой завершится успешно. А именно, рассмотрим результат вычисления очередной тропы Qj.
Если результат - объектное выражение
Oe, то Oe считается результатом всего распутья. Если результат - $error(Oe), то $error(Oe) является результатом всего распутья. Если результат - $fail(k+1), то результатом вычисления всего распутья является $fail(k+1). И, наконец, если результат - $fail(0), то этот неуспех "перехватывается", т.е. делается попытка вычислить следующую тропу. Если же следующей тропы не существует (т.е. j=n), то результатом вычисления всей тропы является неуспех $fail(0). Распутье вида {Q1; Q2; ... Qn;} эквивалентно распутью\{Q1; Q2; ... Qn; $error(Fname "Unexpected fail");}.
Fname -
имя функции, в которой находится конструкция.{Q1; Q2; ... Qn;} =>=>
\{Q1; Q2; ... Qn;
$error(Fname "Unexpected fail");}
Fname -
имя функции, в которой находится конструкция.
Env,m,St |- \{} => $fail(0),St
Env,m,St |- Q1 => Oe,St'
----------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => Oe,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(Oe),St'
------------------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => $error(Oe),St'