    ПРИЛОЖЕНИЕ   ! 

    КРАТКОЕ НЕФОРМАЛЬНОЕ ОПИСАНИЕ ИСПОЛЬЗОВАННОГО В КНИГЕ ЯЗЫКА 
ПРОГРАММИРОВАНИЯ 

    Операционная обстановка. Предполагается, что программист работает в 
некоторой среде (обстановке) — множестве ранее со* вданных исполнителей и 
отдельных программ. Использование этии исполнителей и программ не требует 
никаких специальных усилий со стороны программиста — достаточно просто 
написать вызов соответствующей программы и указать имя исполнителя в разделе 
используемые исполнители. Все вновь создаваемые исполнители и 'программы 
добавляются к этому множеству автоматически, также без каких-либо специальных 
усилий со стороны программиста. Никакой явной выделенной «основной» программы 
нет — выполнять можно любые программы, в том числе и программы, реализующие 
предписания исполнителей. 
    Основные структурные единицы. Основными единицами языка являются 
конструкции исполнитель и программа. Конструкция ис« полнитель записывается в виде 
    исполнитель (имя): (тип) или 
    исполнитель (имя) . СП: 
    .	(система предписаний) 
    .	(описания) 
    конец описаний | —--- —— ________ — ________ — __ 
    (последовательно расположенные программы) конец исполнителя [ -»=.--------__--_-__________ 
    Здесь и ниже в угловые скобки берутся имена понятий (метасимволы), 
используемые для описания языка. Раздел (система предписаний) в описателе 
исполнителя — это последовательность строк вида 
    (номер), (заголовок) 
    или 
    — .(заголовок) 
    Конструкция программа имеет вид 
    программа (заголовок) == (ответ или действия) 
    КРАТКОЕ  ОПИСАНИЕ   ЯЗЫКА   ПРОГРАММИРОВАНИЯ	375 
    ИЛИ 
    программа (заголовок) . дано        : (утверждение) . получить: (утверждение) 
    . (описания) 
    . (действия) конец программы 
    '         Если программа не вырабатывает значения, то <заголовок) —• это 
просто имя программы с указанием формальных параметров. Параметры могут 
располагаться между любыми словами имени программы, а также до или после имени 
и заключаются в скобки — круглые или угловые, по желанию программиста. Для 
Каждого параметра можно указать его тип (если тип 
    не указан, он определяется из контекста)7 а также является ли параметр 
входным, выходным или входно-выходным. 
    Для  программ,  вырабатывающих  значение,  в  заголовке  после имени  и  
формальных  параметров  через  двоеточие   (:)   указывается тип   
вырабатываемого  значения.   Внутри  таких   программ   в   числе ^действии) 
должен встречаться оператор	'(J ответ := (вырабатываемое значение) 
    Для программ, вырабатывающих и принимающих значение, тип значения 
указывается после двойного двоеточия .(::), а внутри должна встречаться строка вида 
    ответ == (объект) 
    где метасимвол <объект> обозначает имя глобального объекта, его компоненту 
или вырезку, или имя программы, вырабатывающей и принимающей значение. 
    При краткой форме записи программы служебное слово ответ не пишется, а 
вырабатываемое значение, имя глобального объекта и Др. записывается сразу 
после знака «==. 
    Управляющие конструкции. Конструкции выбора (ветвления)! если (условие)	выбор 
    . то (действия)	. {при (условие) =s- (действия)} . [иначе (действия)] . [ 
иначе <=*- (действия)] конец если конец выбора 
    Здесь и далее в квадратные скобки заключаются части конструкции, которые 
могут отсутствовать, а фигурные скобки означают повторение содержимого нуль 
или более раз. 
    Конструкции циклов ([повторения) имеют вид: цикл •   IHHB; (утверждение)] 

    376     КРАТКОЕ   ОПИСАНИЕ   ЯЗЫКА   ПРОГРАММИРОВАНИЯ 

    .   [(итератор)] .   [пока (условие)] . выполнять .   (действия) конец цикла 
    где (итератор) — это либо «N раз», либо «для каждого х из М [реверс]» 
(вместо служебных слов для каждого и из можно ио пользовать знаки V и е). В 
качестве N может быть задано выражение. Если значение этого выражения меньше 
либо равно нулю, то тело цикла (действия между словами выполнять и конец 
цикла) не выполняется ни разу. В качестве М могут быть указаны имя структуры 
(объекта или исполнителя типа стек, дек, список и др.) или тип отрезок (точнее 
тип, сконструированный с помощью способа конструирования отрезок, или его имя): 
    Vx е типа (отрезок) 
    Vx з стека (имя стека) 
    Vx e очереди (имя очереди) 
    Vx в начала дека (имя дека) 
    Vx е конца дека (имя дека) 
    Vx е непрочитанной части паследозательности (имя) 
    Vx & части списка (имя списка) за указателем 
    Vx е части списка (имя списка) до указателя 
    Vx в мнбжШства (имя множества) 
    (слова, выделенные полужирным курсивом, можно не писать). 
    Всюду выше (действия) — вто последовательность операторов языка и 
управляющих конструкций, <действия> которых в свою очередь могут содержать 
управляющие конструкции и т. д. К операторам языка относятся операторы 
    утв; <утверждение> 
    ничего не делать 
    отказ 
    выход из цикла 
    выход из программы 
    а также присваивание 
    (объект) := (выражение) 
    и вызов программы, не вырабатывающей значение 
    [(имя исполнителя).] (имя программы 
    с фактическими параметрами) 
    Если в вызове программы <имя исполнителя) не указано, то вызывается 
программа того же исполнителя, к которому относится 

    КРАТКОЕ    ОПИСАНИЕ    ЯЗЫКА    ПРОГРАММИРОВАНИЯ 377 

    и программа, выполнявшаяся до вызова. Фактические параметры располагаются 
в тексте имени программы также, как и формальные. Для каждого параметра можно 
указать его тип, а также является ли параметр входным, выходным или входно-выходным. 
    Записываемые в дано/получить, инвариантах и утверждениях (инв и утв) 
(утверждения) — это произвольные выражения, принимающие значения типа да/нет, 
которые, однако, в отличие от <условий> могут в качестве логических элементов 
включать фрагменты вида 
    (объект): (тип) 
    Такие фрагменты служат как контекстом, исходя из которого определяется тип 
объекта, так и средством контроля. Вазуш заметить, что «проверка» этих 
фрагментов происходит на этапе создания программы, до начала ее выполнения. 
    Описания. <Описания) в программе и в описателе исполнителя состоят из 
следующих разделов! 
    типы: 
    {(имя типа) =» (тип)} константы: 
    {(ими константы) [: (тип)] =» (значение константы)} обозначения: 
    V {(имя с формальными параметрами) ==> (что обозначает)} объекты: 
    {(имя объекта): (тип)} идеи реализации: 
    (произвольный текст-комментарий) используемые исполнители: 
    {(имя исполнителя) [((имя-синоним))] [: (тип)]} 
    Любого из разделов типы, константы, обозначения и др., равно как- и всех 
их вместе, может не быть. Разделы могут повторяться (т. е. может быть 
несколько одноименных разделов) н идти в произвольном порядке. 
    Во всех разделах вместо одного имени (типа, константы, объ« екта и пр.) 
может быть указано несколько имен через запятую. Если значение константы 
состоит из нескольких элементарных значений, то они перечисляются в круглых 
скобках через запятую. Для матриц влементы перечисляются .по строкам, т. е, 
сначала меняется второй индекс, а потом первый: 
    константы: пи — 3.14 
    пробел: символ = "" V :вектор Z(l,,3)-(4,5,6) 

    378 КРАТКОЕ  ОПИСАНИЕ  ЯЗЫКА   ПРОГРАММИРОВАНИЯ 

    М: матрица R(l..2,1..3) = 
    (1.1, 1.2, 1.3,  (элементы располагаются 2.1, 2.2, 2.3) (по строкам 
    В правой части обозначений   (после знака = = )   можно указать  
конкретное значение,  имя объекта  или его  компоненты, или вызов программы, 
например: обозначения: нял       == 1 
    X	==   Г(1) 
    sp(a,b) == Стереометр.скалярное произведение (вх:а,Ь) se(a)      ===== 
Стереометр.скалярное произведение (вх:а,е) 
    Типы. Во всех описаниях выше метасимвол <тип> — это либо имя типа, либо 
явное описание типа с помощью одного из способов конструирования, либо 
многоточие .(•••)• В последнем случав тип определяется из контекста. 
    С содержательной точки зрения тип может быть либо предопределенным, либо сконструированным, 
    Предопределенные типы. Существует пять предопределенных типов: да/нет, 
символ, неотрицательное целое, целое и действительное число (или просто 
число). Для предопределенных типов можно использовать также обозначения Q, S, 
Z+, Z и R соответственно. Константы записываются обычным образом, 
константы-символы заключаются в двойные (") или одинарные (')кавычки по 
желанию программиста. Объект предопределенного типа кроме обычных значений 
может принимать значение неопр. Объекты упорядоченный типов (S, Z+, Z, R) 
могут принимать еще два идеальных значения 
    i—оо и +00. 
    Смысл и форма записи большинства операций над объектами и значениями 
предопределенных типов являются общепринятыми ('• — , =, Ф, <., *S:, ^, >,и, 
или, не, +, —, *, /), Операция возведения в степень обозначается двумя 
звездочками (**). Обозначение унарной операции логического отрицания (не) 
может стоять не только перед именем, но и между словами имени объекта типа 
да/нет или предписания, вырабатывающего значение типа да/нет. Для обозначения 
операции и можно использовать запятую (,), Определены также операции 
    .увеличить на 
    .уменьшить на 
    dlv (деление нацело) 
    mod (остаток от деления) для арифметических типов (Z+, Z, R) и операции 
    .следующий	i 
    .предыдущий	i для дискретных упорядоченных типов IS, Z+, Z)V 

    КРАТКОЕ ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ 379 

    В число стандартных функций языка входят общепринятые функции sqrt 
[квадратный корень), sin, cos, tg, ctg, arcsin, arccos, arctg, arcctg, exp 
(экспонента), In (натуральный логарифм), log 10 (десятичный логарифм), log 2 
{логарифм по основанию 2), min или минимум (минимум произвольного числа 
аргументов), max или максимум (максимум произвольного числ 
    а аргументов), sign или знак, abs или модуль (абсолютная величина), int 
или целое (целая часть), частное и остаток, дублирующие операции div и mod 
со-ответственно, а также функции код (получение по символу его кода в 
диапазоне 0..255) и символ (получение символа по его коду), 
    Способы конструирования типов включают перечисление, отрезок, запись и 
структуры стек, очередь, дек, множество, нагруженное множество, 
последовательность, Л2-список, Л1-список, вектор, матрица, динамический 
вектор. Сами способы и формы их записи изложены в разд. 7. Кроме них 
существуют способы коструирова-пня имя программы и имя исполнителя: 

    объекты: 
    X: имя программы [(заголовок без имени}] Y: имя исполнителя 
    [.(система предписаний) 
    конец описаний]	„ 

    Задание типов объектов. Тип объекта можно описать: а) в опи-саниях в 
разделе объекты, б) в дано/получить, инвариантах и утверждениях, в) в вызовах 
и заголовках программ (фактические и формальные параметры соответственно). 
Если тип объекта вообще не описан или описан через многоточие, то он будет 
определен из контекста. Допустимы и многократные описания типа, если они 
согласуются между собой. 
    Разное. Всюду выше <имя> — это последовательность идентификаторов, 
разделенных пробелами или группами пробелов. Идентификатор— это 
последовательность букв и цифр, начинающаяся с буквы. К буквам, кроме строчных 
и прописных русских и латинских букв относятся знаки диез (#), подчеркивание 
{_) и-at коммерческое (@). 
    При записи нескольких операторов на одной строке они разделяются точкой с 
запятой '{;). Наличие точки с запятой в конце оператора или конструкции не 
является ошибкой, даже если более на этой строке ничего нет. 
    Символом начала комментария является символ |, концом комментария 
'является конец 'строкС