К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 29
Текст из файла (страница 29)
равд. 11.3.4) со схемой совмещаемых массивов из упомянутой секции формальных параметров. В данной активации все соответствую- 1ээ Олисаьие языка Шие формальные параметры относятся к некоторому типу, который выводится с помощью схемы совмещения из типа фактического параметра(ов) (см. равд. ! 1.3.4). 1!.3.2.1. Фактические параметры-значения.
Фактический параметр-значение — это некоторое выражение. Формальный параметр же обозначает некоторую переменную, которой при ее создании (см. равд. 10.3) присваивается значение фактического параметра. Если формальный параметр не является совмешаемым массивом-параметром, то значение фактического параметра должно быть совместимо по присваиванию (см. равд. 6.5) с типом формального параметра.
Если Ч)ормальный параметр — совмешаемый массив-параметр, то тип фактического параметра не должен быть совмещаемым типом (см. равд. 11.3.4). 11.3.2.2. Фактические параметры-переменные. Любой фактический параметр-переменная представляет собой переменную. На протяжении всей активации формальный параметр обозначает ту переменную, которую обозначал фактический параметр в момент начала активации (см. равд. 10.3). Фактический параметр не должен быть ни компонентой упакованного массива или записной переменной, ни полем признака.
Если формальный параметр не представляет собой совмешасмого массива-параметра, то и фактический параметр, и формальный параметр должны относиться к одному и тому же типу. 11.3.2.3. Фактические параметры-процедуры. Фактический параметр-процедура — это имя процедуры. Формальный параметр обозначает ту процедуру, которую обозначает такой фактический параметр (см. разд. 10.3). Списки формальных параметров, если они есть у формального и фактического параметров, должны быть конгруэнтными (см.
равд. 11.3.3). 11.3.2.4. Фактические параметры-функции. Фактический параметр-функция представляет собой имя функции. Формальный параметр обозначает ту функцию, которую обозначает такой фактический параметр (см. равд. 10.3). Типы результата и формального, н фактического параметров должны обозначать один и тот же тип. Списки формальных параметров, если они есть у формального н фактического параметров, должны быть конгруэнтными' (см. равд.
11.3.3). 11.3.3. Конгруэнтность списков параметров. Два списка формальных параметров называются конгруэнтными, если у них одинаковое число секций параметров, и сами соответствующие секции формальных параметров удовлетворяют одному из следующих условий: П. Пропедурм и функции 1У9 а) обе представляют собой спецификации параметров-значений с одним и тем же числом имен в их списках имен, причем либо обе содержат имя типа, обозначающее один и тот же тип, либо обе содержат эквивалентные схемы совмещаемых массивов; б) обе представляют собой спецификации параметров-переменных с одним и тем же числом имен в их списках имен, причем либо обе содержат имя типа, обозначающее один и тот же тип, либо обе содержат эквивалентные схемы совмещаемых массивов; ' в) обе представляют собой спецификации параметров-процедур с конгруэнтными списками формальных параметров; г) обе представляют собой спецификации параметров-функций с конгруэнтнымн списками формальных параметров и с типами результата, обозначающими один и тот же тип.
Две схемы совмещаемых массивов (каждая с однои-единственной спецификацией типа индекса) называются эхвивилентными, если справедливы все три следующих условия: а) имена ординального типа в спецификации типа индекса обозначают один и тот же тип; б) либо каждая содержит компоненту-схему схемы совмещаемых массивов, причем эти компоненты-схемы, эквивалентны, либо каждая содержит компоненту — имя типа, причем эти компоненты являются именами типов и обозначают один и тот же тнп; в) обе схемы представляют собой схемы либо упакованных, либо неупакованных совмещаемых массивов. Пример двух эквивалентньах схем совмещаемых массивов: аггау [Е1..Н1: 1паееег; с2..Н2: Са1ог] аТ раскед аггау [ТЗ..НЗ: Т2] о1 Т аггау [Сои1..Нгрь1: 1псехег] оТ аггау [Сои2..НТ|Н2: Са1ог] оТ расхед аггау [[оиЗ..Н[ННЗ: Т21 сТ Т 11.3.4.
Совмещаемость и совмещаемые типы. Массивовый тип Т [с единственным типом индекса) называется совмещаемым [соп[оппаЫе) со схемой 5 совмещаемого массива (с единственной спецификацией типа индекса), если справедливы все следующие условия. Пусть 1 — имя ординального типа из спецификации типа индекса в 5. а) Тип индекса из Т совместим (согпрь1[Ые) с типом, обозначенным 1. б) Каждое из значений типа индекса из Т представляет собой некоторый элемент множества значений, относящихся к типу, обозначенному 1. 200 Описание язьгки в) Если 5 не содержит какой-либо схемы совмещаемого массива, то тип компоненты из Т тот же, что и тип, обозначенный именем типа в Б; в противном случае тип компоненты из Т вЂ” совмещаемый со схемой компоненты из 5.
г) Тип Т упакован, если и только если Ь представляет собой схему упакованного совмещаемого массива. Ситуация, когда требуется совмещаемость, а условие б) не выполняется, считается ошибкой. Совмеи(аемый тип, выведенный (г(ег!уег() с пол!оп(ью Я из Т, представляет собой массивовый тип, имеющий тот же тип индекса, что и Т, причем он упакован, если и только если Т вЂ” упакованный; тип его компонент или тот же самый, что и тип компонент из Т, или же, если 5 содержит в качестве компоненты другую схему совмещаемого массива, представляет собой совмещаемый тип, выведенный с помощью схемы компоненты из типа компоненты из Т. Имена границ, введенные в спецификации типа индекса, обозначают самое маленькое и самое большое значения, относящиеся к типу индекса из совмещаемого типа.
ПЛ. ПРЕДОПНЕАННЫЕ ПРОЦЕДУРЫ 11.4.1. Процедуры для работы с файлами. Существует несколько предописанных процедур, введенных специально для работы с текстовыми файлами. Детально они описываются в разд. 12. Перечисленные ниже процедуры работают с любой файловой переменной 1 (см. разд. 6.2.4 и 7.4). Рп1(1) Йежгце(1) приводит н тому, что 1 становится пустой последовательностью и находится в режиме формирования ситуации, когда 1 не определена, не находится в режиме формиронания или пе определена буферная переменная И, считаются ошибкой. !!роцедура добавляет значение 1! в конец последовательности 1 йене!(1) приводит к тому, что ! переводится в режим чтения (!паресПоп) и первая позиция последовательности становится ее текущей позицией.
Если последовательность пуста, то ео((1) становится !гпе, а 11 — полностью неопределенной, в противном случае ео((1) становится 1а!зе, а 11 — первой компоненты последовательности Ое1 (1) ситуация, когда 1 нс определена или со((1) — ггпе, считаетг ся ошибкой. Обращение приводит к тому, что текущая позиция перемещается к следующей компоненте, если она существует, а И получает ее значение; если очередной компоненты нег, то ео((1) становится 1гпе, а И полностью неопределенной В каждом из следующих определений все вхождения ( обозначают одну и ту же файловую переменную, имена у, у1, ..., Уп соот- !Д Т)роцедуры и функции 201 ветствуют переменным, а е, с1, ..., еп — выражениям. Заметим, что псременныс ч, у1, ..., чп не есть фактические параметры-перемен- ные, поэтому они могут быть компонентами упакованных массивов и записей.
Кеаб(1, ч1, ..., чп) Квай(1, ч) эквивалентно оператору: Ьевйп Кеаб(1, ч1); ...; Ксаб(1, чп) епй если !не текстовой файл, то обращение эквннзлецтно оператору: ьек!и ч: 11; гге!(1) спи экнивалентно оператору: Ьец!п УЧгис(1, е1); ...; йггпе(1, еп) епд гслн 1 не текстовой файл, то обршпеннс эквивалентно опергп ору: Ьея!и Ц:= е; Рн!(1) спи %гг!е(1, е!, ..., еп) цГг!!е(1, е) Ысы(р) порождает новое идентифицирующее ссылочное значение, имеющее тип, указанный для р, и присваивает его переменной р. Идентифицированная переменная р) полностью не определена. порождает новое идентифицированное ссьшочное значение, имеющее тип, указанный для р, и присваивает его переменной р.
Идентифицированная переменная р) полностью не определена. Типом области дпя этого ссылочного типа должен быть записной тип с вариантной частью. Первая из констант (с)) выбирает нз этой вариантной части некоторый вариант; следующая константа (если она есть) выбирает вариант из следующей (вложенной) вариантной части и т.
д. Если в идентифици-. рованной переменной в этих вариантных частях будут сделаны активными какие-либо лругие варианты, кроме выбранных, то это считается ошибкой. Ошибкой считается и использование идентифицированной переменной р) в качестве фактора, фак тического параметра-переменаой н В качестне переменной в операторе присваивания (однако комп<шенты р) о этих местах могут встречаться) уничтожает идентифицирующее значение ги Если Ч равно пй, то такая ситуация считается ошибкой.
)Чечч(р, с1,,, сп) Пирозе(ч) 11.4.2. Процедуры динамического размещения. Процедуры динамического размещения представляют собой средство, с помощью которого порождаются ((ч(етч) новые ссылочные значения и соответствующие идентифицированные переменные или уничтожаются (Р!врезе). Пусть в последующих описаниях р — ссылочная переменная, с) — ссылочное выражение, а с1, ..., сп, 1с!, ..., (сп — — константы.