2.11. ОПРЕДЕЛЕНИЯ ФУНКЦИЙ $ ОпределениеФункции =
$ ИмяФункции ТелоФункции ";".
$ ТелоФункции =
$ ОбразцовоеРаспутье | Предложение.
Определение функции связывает имя функции с ее телом, т.е. конструкцией, описывающей способ ее вычисления.Если определение функции имеет вид
Fname Snt; , оно эквивалентно определению Fname \{ Snt; }; . Пусть определение функции Fname имеет видFname Palt
Тогда вычисление вызова этой функции, имеющего вид <Fname Oe> сводится к вычислению источника Oe : Palt. Если при этом получается объектное выражение Oe' или ошибка $error(Oe'), они и считаются результатом вычисления вызова. Если же получается неуспех $fail(k), то дальнейшие действия зависят от того, была ли функция Fname объявлена как откатная или безоткатная. Для откатной функции в качестве результата выдается $fail(0), а для безоткатной - $error(Fname "Unexpected fail").
{},0,St |- Oe : Palt => Oe',St'
-------------------------------
St |- <Fname Oe> => Oe',St'
{},0,St |- Oe : Palt => $fail(k),St'
------------------------------------
St |- <Fname Oe> => $fail(0),St'
где функция
Fname - откатная, т.е. объявлена как$func? Fname Farg = Fres;.
{},0,St |- Oe : Palt => $fail(k),St'
-------------------------------------------------------
St |- <Fname Oe> => $error(Fname "Unexpected fail"),St'
где функция Fname - безоткатная, т.е. объявлена как$func Fname Farg = Fres;.
{},0,St |- Oe : Palt => $error(Oe'),St'
---------------------------------------
St |- <Fname Oe> => $error(Oe'),St'
В вышеприведенных правилах вывода предполагается, что функция
Fname имеет определение Fname Palt.