g)* операнд вида ВИД:
АРНЫЙ операнд выдающий ВИД в СРЕДЕ [с J.
{ Примеры:
а) - х + 1 Ь) - х
с) - х • 1 }
Семантика.
Выдача W формулы F в окружении Е определяется следующим образом:
пусть R — процедура, выдаваемая обозначением-операции формулы F;
пусть V1; ..., Vn [п есть 1 или 2] — [совместные} выдачи операндов формулы F в (локализующем, см. 3.2.2.Ь,} окружении Е1, устанавливаемом вокруг Е;
W - выдача вызова {5.4.3.2.b} процедуры R в Е1 с Vj,..., Vn;
требуется, чтобы W по области действия не была младше Е.
[ Отметим, что a t b не в точности то же, что и аь в обычных обозначениях; действительно, как (—1 t 2+4 = 5), так и (4 — 1 t 2 = 3) имеют значение истина, поскольку первый, символ-минус является обозначением- унарной-операции, а второй — обозначением-бинарной-операции. J
Вызовы
{ Вызовы используются для задания исполнения параметризованных процедур с фактическими-параметрами.
Примеры:
sin (х) • (р Isinl cos) (x).J
Синтаксис.
вызов в СРЕДЕ выдающий ЗНАЧЕНИЕ {5D} :
ПЕРВИЧНОЕ в СРЕДЕ раскрыто выдающее процедуру
с [ПАРАМЕТРАМИ вырабатывающую ЗНАЧЕНИЕ [5DJ, упакованные кратким
фактические [ПАРАМЕТРЫ в СРЕДЕ { Ь, с}.
фактические [ПАРАМЕТРЫ ПАРАМЕТР в СРЕДЕ [a, b}:
фактические [ПАРАМЕТРЫ в СРЕДЕ { b, с J.
знак а также [94f],
фактический ПАРАМЕТР в СРЕДЕ { с}.
фактический параметр вида ВИД в СРЕДЕ { a, b} :
основа в СРЕДЕ сильно выдающая ВИД ( 32d J.
(Примеры:
вывод (станд вывод, х) (см. 10.3.3.1.а)
станд вывод, х с) х }
Семантика.
Выдача W вызова С в окружении Е определяется следующим образом:
пусть {процедура } R и Vj, ..., Vn будут [ совместными J выдачами ПЕРВИЧНОГО из С в Е и составляющих фактических-параметров этого С в [локализующем, см. 3.2.2.Ь,} окружении Е1, устанавливаемом вокруг Е;
W — выдача вызова {b} процедуры R в El с V,..., Vn;
требуется, чтобы W по области действия не была младше Е.
Выдача W „вызова” процедуры R в окружении Е1, возможно со значениями {параметров} Vj Vn, определяется следующим образом:
пусть Е2 — окружение, устанавливаемое [ 3.2.2.ь) по Е1 вокруг окружения процедуры R согласно заданию-аргументов упакованного-задания- аргументов, если оно есть, текста-процедуры из R со значениями, если они есть, Vj,..., Vn;
W — выдача в Е2 основы текста-процедуры из R.
{ Рассмотрим Последовательное-предложение
проц замельзон = (цел п, проц (цел) вещ f) вещ:
начало длин вещ s ; = длин 0;
для і до п цк s +: = удл f (і) t 2 кц;
укр длин корень (s)
конец;
замельзон (ш, (цел)) вещ : xl [j]).
В этом контексте последний вызов дает тот же эффект, что и ядро: вещ:
цел п = т, проц (цел) вещ f = (цел j) вещ : xl [j];
начало длин вещ s : = длин 0;
для і до п цк s +: = удл f (і) t,2 кц;
укр длин корень (s) конец).
Таким образом, передача фактических-параметров аналогична исполнению описаний-тождества (4.4.2.а); см. также установление (3.2.2:Ь) и приписывание (4.8.2.a).J
Переходы
£ Переход может прекратить исполнение кортежа и заставить некоторый другой помеченный кортеж исполняться вместо него.
Примеры:
у : = если х>0 то корень (х) иначе на Принстон все • на сен пьер де шартрез.
С другой стороны, если контекст требует вида 'процедура вырабатывающая ЗНАЧЕНИЕ', то вместо этого выдается процедура, основой которой служит данный переход, как в проц пуст m := на норт бервик.}
Синтаксис.
переход в СРЕДЕ сильно выдающий ЗНАЧЕНИЕ {5а} : возможное указание { bj,
использующий СЛОВО идентификатор в СРЕДЕ выдающий метку {48Ь/.
указание £aj: знак на ОФОРМЛЕННЫЙ 194 f, -/ ;
знак иди ОФОРМЛЕННЫЙ f 94f, -], символ верхний предел ОФОРМЛЕННЫЙ f 94g, -}.
/Примеры:
на коотвейк • go to Варшава • зандвоорт
на • go to}
Семантика.
Переход-в-СРЕДЕ-выдающий-ЗНАЧЕНИЕ J в окружении Е исполняется следующим образом:
• пусть сцена, выдаваемая в Е Идентификатором-метки этого J, составлена из кортежа S2 и окружения Е1;
Случай А: 'ЗНАЧЕНИЕ' не является никакой 'процедурой вырабатывающей ЗНАЧЕНИЕ1':
пусть S1 — кортеж наименьшего {1.1.3.2 .g} последо- вательного-предложения, содержащего S2;
исполнение S1 в Е1 или любого кортежа, исполняемого вместо него в Е1, прекращается {2.1,4.3.е};
S2 исполняется в Е1 „вместо” S1 в Е1;
Случай В: 'ЗНАЧЕНИЕ' есть 'процедура вырабатывающая ЗНАЧЕНИЕ!':
J в Е { завершается и J выдает процедуру, составленную из:
нового текста-процедуры-в-СРЕДЕ-выдающего-ЗНАЧЕ- НИЕ, основа которого подобна {1.1.3.2.kJ этому J, (ii) окружения Е1.
5.5. Основы, связанные со значениям в любого вида
Ядра
■[ Ядра можно использовать, чтобы обеспечить сильную позицию, например, имя вещ (хх) в имя вещ (хх) : = 1, имя книга (нил) в следующая из проект : = : имя книга (нил) и строк (р I cl г) в s + := строк (р I с I г) .1
Синтаксис.
а) ядро в СРЕДЕ выдающее ЗНАЧЕНИЕ {5DJ :
формальный описатель ЗНАЧЕНИЯ в СРЕДЕ {46bJ, ЗАКРЫТОЕ предложение в СРЕДЕ сильно выдающее
ЗНАЧЕНИЕ {31а, 33а, с, d, е,34а, 35а, -}
{ Пример:
а) имя книга (нил)J
{ Выдачей ядра является, в силу предысполнения (2.1.4.1.с), выдача его ЗАКРЫТОГО-предложения. J
Пропуски
Синтаксис.
а) пропуск в СРЕДЕ сильно выдающий ЗНАЧЕНИЕ f 5а) : знак пропуск { 94 fj.
£ Пример:
а) пропуск J
Семантика.
Выдачей пропуска является некоторое {неопределенное J значение, по области действия такое же, как и первичное окружение.
{ Вид выдачи пропуска-выдающего-ЗНАЧЕНИЕ есть 'ЗНАЧЕНИЕ'. Про- пуск-выдающий-пустое значение служит пустым оператором и его можно, например, использовать после метки, которая отмечает конец последова- тельного-предложения. J-
6. ПРИВЕДЕНИЕ
{ Приведения порождают приводимое из приведенного в соответствии с тремя критериями: априорного вида приводимого до применения какого-либо приведения, апостериорного вида приведенного, требуемого после выполнения приведений, и синтаксической позиции, или „приводимости” этого приведенного. Приведения могут применяться друг к другу последовательно.
Существует шесть возможных приведений, называемых „распроцеду- ривание”, „разыменование”, „объединение”, „обобщение”, „векторизация” и „опустошение”. Каждое приведение, исключая „объединение”, оказывает соответствующее динамическое влияние на связанные с ним значения. Следовательно, при помощи Приведений неявно можно запрограммировать ряд примитивных действий. J
Приведенные
f Всякое приведенное есть конструкт, дерево порождения которого может начинаться с последовательности приведений, оканчивающейся приводимым. Порядок (завершения) исполнения этих приведений идет поэтому от приводимого к приведенному (, что и определило выбор этих парапонятий) . Например, і в вещ (і) является приведенным, дерево порождения которого включает 'после обобщения' и 'после разыменования' именно в этом порядке на пути от приведенного к приводимому. Разыменование должно завершиться прежде, чем произойдет обобщение.
Соответствующее дерево порождения (с опущенным в СРЕДЕ’, ’использующий СЛОВО' и невидимыми поддеревьями) выглядит так:
'приведенный идентификатор
сильно выдающий вещественное'
I б.І.І.а
[-»'идентификатор выдающий вещественное после обобщения'
обобщение I 6.5.1.а
'идентификатор выдающий целое после разыменования' разыменование | 6.2.1.а
'идентификатор выдающий имя целого после сохранения'
I 6.1.1.Г
'идентификатор выдающий имя целого' (приводимое)
J 4.8.l.b, 9.1.l.h
'символ буква и лат' . JСинтаксис
УСИЛЕНИЕ fa, 66а) :: УКРЕПЛЕНИЕ [вJ; обобщение [б5а, b, с, d] ; векторизация ]б6а} ; опустошение {67а, b}.
УКРЕПЛЕНИЕ [ А, b ] :: РАСКРЫТИЕ { С }; объединение { 64а] .
С) РАСКРЫТИЕ { В, с, d, 62а, 63а, 64а, 65а, b, с, d] ::
сохранение { f J; разыменование {б2а} ;
распроцедуривание {63а} .
СМЯГЧЕНИЕ {е, 63b} :: сохранение { f} ;
мягкое распроцедуривание {63b} .
ФОРМА : : РАСКРЫВАЕМОЕ; ПРЯМОЕ.
РАСКРЫВАЕМОЕ :: выборка в СРЕДЕ; вырезка в СРЕДЕ;
вызов в СРЕДЕ; текст процедуры в СРЕДЕ;
АРНАЯ формула в СРЕДЕ;
использующий СЛОВО идентификатор в СРЕДЕ.
ПРЯМОЕ :: присваивание в СРЕДЕ; ядро в СРЕДЕ;
отношение одноименности в СРЕДЕ; изображаемое в СРЕДЕ;
ЛОКАЛИЗУЮЩИЙ генератор в СРЕДЕ; текст формата в СРЕДЕ.
приведенная ФОРМА сильно
выдающая ЗНАЧЕНИЕ { 5А, В, С, D, A341i} :
если (ФОРМА) есть (РАСКРЫВАЕМОЕ), РАСКРЫВАЕМОЕ выдающее значение после УСИЛЕНИЯ [ а] ;
если (ФОРМА) есть (ПРЯМОЕ),
ПРЯМОЕ выдающее ЗНАЧЕНИЕ после УСИЛЕНИЯ {А],
если неверно что (ЗНАЧЕНИЕ после УСИЛЕНИЯ) есть (пустое значение после распроцедуривания)
приведенная ФОРМА крепко
выдающая ВИД [ 5 А, В, С, D, 542с} :
ФОРМА выдающая ВИД после УКРЕПЛЕНИЯ { в] .
:) приведенная ФОРМА раскрыто
выдающая ЗНАЧЕНИЕ f 5А, В, С, D] :
ФОРМА выдающая ЗНАЧЕНИЕ после РАСКРЫТИЯ [ с].
I) приведенная ФОРМА слабо выдающая
?ИМЯ СОСТАВНОГО {5А, В, С, D} :
ФОРМА выдающая ?ИМЯ СОСТАВНОГО после РАСКРЫТИЯ { с] , если неверно что (?ИМЯ) есть (ПУСТО)
и (РАСКРЫТИЕ) есть (разыменование)
• приведенная ФОРМА мягко выдающая ВИД { 5А, В, С, d] : ФОРМА выдающая ВИД после СМЯГЧЕНИЯ [ D].
» ФОРМА выдающая ЗНАЧЕНИЕ
после сохранения [С, D, 67а, b} :
ФОРМА выдающая ЗНАЧЕНИЕ.
)* приведенное ПРИВОДИМО выдающее ЗНАЧЕНИЕ:
приведенная ФОРМА ПРИВОДИМО выдающая ЗНАЧЕНИЕ { a, b, с, d, е] .
)* приводимое выдающее ЗНАЧЕНИЕ:ФОРМА выдающая ЗНАЧЕНИЕ.
{Примеры:
3.14 (в х : = 3.14)
3.14 (вх + 3.14)
sin (в sin (х))
х1 (в х1 [2] : = 3.14)
х (в х := 3.14)}
{ Ссылки на 'ФОРМУ выдающую ЗНАЧЕНИЕ' (правило f) содержатся в подразделе 5.1.А, В, С, D. Заметим, что 'ФОРМА выдающая ЗНАЧЕНИЕ' может быть тупиком. Тупики в этой главе не отмечаются^
{ Существуют пять сортов синтаксических позиций, а именно:
„сильные” позиции, т.е. фактические-параметры, например х в sin (х), источники, например х в у := х, ЗАКТЫТЫЕ-предложения ядер, например (нил) в имя книга (нил), и операторы, например, у : = х в (у := х; х : = 0) ;
„крепкие” позиции, т.е. операнды, например х в х + у;
„раскрытые” позиции, т.е. выясняющие-предложения, например х > 0 в (х>0 1x1 0), грани, например і в х1 [і], и ПЕРВИЧНЫЕ вызовов, например sin в sin (х);
„слабые” позиции, т.е. ВТОРИЧНЫЕ выборок и ПЕРВИЧНЫЕ вырезок, например х1 в х1 [і];
„мягкие” позиции, т.е. получатели, например х в х := у, и одно из ТРЕТИЧНЫХ отношений-одноименности, например х в хх : =: х. Сильные позиции появляются также при уравнивании (3.2.1.е).
В сильных позициях могут встретиться все шесть приведений, в крепких позициях запрещены векторизация, обобщение и опустошение, в раскрытых и слабых позициях, кроме того, запрещено объединение, а в мягких позициях разрешено только распроцедуривание. Однако ФОРМА-выда- ющая-СОСТАВНОЕ-после-разыменования не может быть прямым наследником приведенной-ФОРМЫ-слабо-выдающей-СОСТАВНОЕ (правило d), поскольку в противном случае х : = х1 [і] было бы двусмысленным синтаксически (хотя в этом случае не семантически). Точно так же ПРЯМОЕ-выдаю- щее-пустое-значение-после-распроцедуривания не может быть прямым наследником приведенного-ПРЯМОГО-сильно-выдающего-пустое-значение (правило а), так как в противном случае было бы двусмысленным (проц пусть энгельфриет; проц пуст рейпенс = пропуск: энгельфриет := рейпенс: пропуск) .}
Разыменование
{ Разыменование служит для получения значения, именуемого некоторым именем, как в х := у, где у выдает имя, именующее вещественное число, и именно это число присваивается имени, выдаваемом получателем х. Априорный вид у, рассматриваемого как приводимое, есть 'имя вещественного', а его апостериорный вид, когда у рассматривается как приведенное, есть 'вещественное'.
Синтаксис
а) ФОРМА выдающая ВИДІ после разыменования {б1С }:
ФОРМА выдающая ИМЯ ВИДА2 после РАСКРЫТИЯ £61С].
если ВИДІ фиксирует ВИД2 { 47а, Ь, с, -}.
{ Пример:
а) х (в вещ (х))}
Семантика
Выдача W ФОРМЫ -выдающей-ВИД-после-разыменования F определяется следующим образом:
пусть {имя} N — выдача ФОРМЫ-после-РАСКРЫТИЯ F;
требуется, чтобы N не было псевдоименем;
W — значение, именуемое этим N.
Распроце ду ривание
{Распроцедуривание используется, когда надо вызвать процедуру без параметров. Например, в х := псч псевдослучайное число й вызывается процедура, выдаваемая псч, и присваивается выдаваемое ею вещественное число; апостериорным видом псч является 'вещественное'. С точки зрения синтаксиса из априорного вида удаляется начальное 'процедура вырабатывающая'. }
Синтаксис
ФОРМА выдающая ЗНАЧЕНИЕ после распроцедуривания {61С,67а}: ФОРМА выдающая процедуру вырабатывающую ЗНАЧЕНИЕ после РАСКРЫТИЯ {61С}.
ФОРМА выдающая ВИД после