38
Входной шаблон является кортежем переменных CPN, следующих за
ключевым словом input. Он перечисляет переменные CPN, которые могут
быть использованы в коде операций. Код операций может использовать
значения этих переменных CPN, но не может изменять их. Переменные CPN,
перечисленные во входном шаблоне, могут быть использованы в коде
операций, если их объявили как идентификатор ML с таким же
именем в
области описания переменных. Если входной шаблон опущен, то
подразумевается, что никакие переменные CPN не могут быть использованы в
коде операций.
Выходной шаблон является кортежем переменных CPN, следующих за
ключевым словом output. Он перечисляет переменные CPN, которые
изменяются в результате выполнения кода операций. Выходной шаблон должен
быть переменной CPN или кортежем переменных CPN без
повторений. Если
выходной шаблон опущен, то подразумевается, что никакие переменные CPN
не вычисляются.
Код операций является выражением языка ML, следующим за ключевым
словом action. Он не может содержать описание множеств цветов,
переменных CPN или ссылочных переменных. Тем не менее, к кодовому
выражению можно применить объявленные пользователем константы,
операции, и функции. Кроме того, новые функции
и константы могут быть
определены для локального использования посредством let-in-end.
Кодовое выражение выполняется как локальное описание в среде, содержащей
переменные CPN, определенные во входном шаблоне. Это гарантирует, что
кодовое выражение не может изменить непосредственно любые переменные
CPN, а может изменить только их локальные копии. Когда кодовое выражение
выполнено, полученный результат применяется к
CPN переменным в выходном
шаблоне. Кодовое выражение при оценке в среде, содержащей входные
переменные, должно дать результаты такого же типа как выходные
переменные. Если не представлено никакой выходного шаблона, то
подразумевается тип результата unit.
Сегменты кода используются для более сложной обработки входных
фишек. Например, суммирование фишек, описанное в разделе 6.2, можно
представить,
используя кодовый сегмент:
z
x
y
sum
input (x,y);
output (z);
action
(x+y);
c
INT
a
INT
5`10++4`20
9
5`10++
4`20
b
INT
7`3++5`4
12
7`3++
5`4