Н. Джехани - Язык Ада (1988) (1160771), страница 80
Текст из файла (страница 80)
При сравнении двух одномерных массивов одинакового типа сопоставленными являются компоненты (если они есть), значения индексов которых сопоставляются друг с другом следующим образом: сопоставляются нижние границы диапазонов индексов друг с другом, следующие эа сопоставленными индексами также сопоставляются. При сравнении двух многомерных массивов сопоставленными являются компоненты, у которых значения индексов сопоставле. ны в порядке позиций индексов. Если равенство явно определено для лимитируемого типа, оно не распространяется на составные типы, имеющие подкомпоненты лимитируемого типа(допускается явное определение равенства для таких составных типов).
Операции упорядочивания «, =, > и > =, которые определены для дискретных индексируемых типов, соответствуют лексикографическому порядку, основанному на предопреде. пенном отношении порядка для типов компонент. Пустой массив лексикографически меньше массива, имеющего по крайней мере одну компоненту. Для непустых массивов левый операнд лексикографически меньше правого операнда, если первая компонента левого операнда меньше первой компоненты правого операнда или если их первые компоненты равны, а хвост ле.
вого операнда лексикографически' меньше правого (хвост состоит из оставшихся компонент, исключая первую, и может быть пустым). Проверки принадлежности 1п и по1 )п предопределены для всех типов. Типом результата является предопределенный тип ВООЕЕАМ. Для проверки принадлежности диапазону простое выражение и границы диапазона должны быть одного и того же скалярного типа; для проверки принадлежности с обозначением типа тип простого выражения должен быть базовым для этого обозначения. Вычисление проверок принадлежности )л вырабатывает результат ТВОЕ, если значение простого выражения принадлежит данному диапазону или это значение принадлежит подтипу, заданному обозначением типа; в противном случае вычисление вырабатывает результат РА(.ЗЕ (для значений вещественного типа см. 4.5.7).
Проверка принадлежности пс( (п вырабатывает результат, противоположный результату проверки принадлежности 1и. Примеры; х/=У < "А" апе "А" < "АА" — ТВОЕ "АА" < В" апд "А" < "А — ТВОЕ му сля = ппв -- истина, если му сля пуст (см. 3.5 л) му сАл = уоця сАя — истина, если используется один и тот же автомобиль му сАя.ав = убоя сАл.ав — истина, если оба автомобиля идентичны М пат Ш 1 .. 1Π— проверка принадлежности диапазону тООАУ (п МОМ ..
ГЯ1 -- ПРОвЕрКа ПрннадлвжНОсти диапазону ТООАУ 1и ЬУЕЕКОАУ -- проверка принадлежнОСти пОДтипу (см. 3.5.1) Айсн1че 1п О18к ОМ17 — проверка принадлежности подтипу (см. 3.7.3) Примечание. Предопределенные операции отношения и проверка принадлежности не воз. буждают исключений, но исключение может быть возбуждено при вычислении операндов этих операций. Если именуемый тип имеет компоненты, зависящие от дискриминантов, то компоненты двух значений сопоставлены тогда и только тогда, когда равны их дискриминанты. Компонен- " Если снп есть.
— Прим. ред. Глава 4 ты непустых массивов сопоставлены, если и только если значения атрибута ЕЕМОТН(М) для каждой позиции индекса одинаковы у обоих массивов. Ссылки: базовый тип 3.3, возбуждение исключения 11, вычисление 4.5, граница диапвэона3.5, диапазон 3.5, диапазон индекса 3.6, дискретный тип 3.5, идентификатор компоненты 3.7, именуемый тип 3.7, индекс 3.6, индексируемый тип 3.6, исключение 11, компонента 3.3, лимитируемый тип 7.4.4, обозначение типа 3.3.2, объект 3.2.1, операция 4.5, операция типа 3.3, подкомпонентв 3.3, предопределенная операция 4.5, предопределенный логический тип 3.5.3, принадлежать подтипу 3.3, простое выражение 4.4, пустая запись 3.7, пустой массив 3.6.1, размерность 3.6, скалярный тип 3.5, следующий 3.5.5, составной тип З.З, ссылочное значение 3.8, ссылочное значение пвй 3.8, тип 3.3, тип компоненты 3.3, указывать 3.8.
4.5.3. БИНАРНЫЕ АДДИТИВНЫЕ ОПЕРАЦИИ Бинарные аддитивные операции + и — предопределены для любого числового типа и имеют свой обычный смысл. Операция катенации 6 предопределена для любого одномерного нелимитирувмого индексируемого типа. Тип правого Тнп резуль тата операнда Знак операции Операция Тип левого операнда + сложение Любой чис- Тот же чис. Тот же чис. вовой тип лозой тип ловой тип вычитание Любой чис- Тот же чис- Тот же числовой тип вовой тип лозой тип Тот же ин- дексируемый тип Тип компо- ненты Любой ин. дексируемый тип Тип компо- ненты Тип компо- ненты Для вещественных типов точность результата определяется типом операндов (см. 4.5.7). Если оба операнда — одномерные массивы, то результатом катенации является одномер ный массив, длина которого равна сумме длин операндов, а его компоненты составлены из компонент левого операнда и следующих за ними компонент правого операнда Нижняя граница этого результата совпадает с нижней границей левого операнда, если левый операнд— не пустой массив; в противном случае результатом катенации является правый операнд.
Если один иэ операндов имеет тип компоненты индексируемого типа, то результат катенации определяется по приведенным выме правилам, где вместо этого операнда используется массив, имеющий этот операнд в качестве своей единственной компоненты, и с нижней границей, совпадающей с нижней границей подтипа индекса. Операцией катенации возбуждается исключение СОМВТЯА(МТ ЕЯЯОЯ, если верхняя граница результата выходит за диапазон подтипа индекса, кроме того случая, когда результат— не пустой массив, а также когда какой. либо операнд, тип которого есть тип компоненты, име.
ет значение, не принадлежащее данному подтипу компоненты. Примеры: 2+ 01 "А" 6 "ВСО" 'А' 5 ВСО' Я должен иметь вещественный тип катенация двух строковых литералов катенация символьного и строкового литералов катенация двух символьных литералов 'А' 6 'А' катенация Любой индексируемый тип Любой индексируемый тип Тип компо. ненты Тот же ин. дексируемый тип Тот же ин- дексируемый тип Тот же ин- дексируемый тип Любой ин. дексируемый тип Имена л вы меняя 4.54. УНАРНЫЕ АДДИТИВНЫЕ ОПЕРАЦИИ Унарные аддитивные операции + и — предопределены для любого числового типа и имеют свой обычный смысл.
Для этих операций операнд и результат имеют один и тот же тип. Знак Операция 7ил операнда Тип результата операции Сохранение знака Любой числовой тип Изменение знака Любой числовой тип Тот же числовой тип Тот же числовой тип Ссылки: операция 4.5, операция типа 3.3, предопределенная операция 4.5, тип 3.3, числовой тип 3.5. 4.5.5. МУЛЬТИПЛИКАТИВНЫЕ ОПЕРАЦИИ Операции * и / предопределены для любого целого и любого плавающего типа и понимают.
ся в обычном смысле. Операции пюб и пил предопределены для любого целого типа. Для каждой из этих операций операнды и результат имеют один и тот же базовый тип. Для плавающих типов точность результата определяется типом операндов (см. 4.5.7). Знак Операция Тип операнда Тип результата операции Умножение Любой целый тип Тот же целый тип Любой плавающий тип Тот же плавающий тип Деление нацело Любой целый тип Тот же целый тип Деление плавающих Любой плавающий тип Тот же плавающий тип глод Вычет по модулю Любой целый тип Тот же целый тип Тот же целый тип Любой целый тип Остаток Деление нацело и остаток связаны следующим соотношением: А ж (А/В)*В + (А пил В) где (А гее В) имеет знак значения А и абсолютное значение, меньшее абсолютного значения В.
Деление нацело удовлетворяет следующему тождеству: (-А)/В = -(А/В) = А/( — В) Результат операции вычета по модулю таков, что (А пюб В) имеет знак значения В и абсолют. ное значение, меньшее абсолютного значения В, и существует целое значение М такое, что должно удовлетворяться следующее соотношение: А = В ° М + (А глод В) Для каждого фиксированного типа предопределены операции операнд предопределенного типа )МТЕВЕЛ. Знак Операция Тил левого операции операнда умножения и деления на Тип результата Любой фиксиро. ванный тип (МТЕВЕП Тип левого операнда !МТЕВЕЛ Умножение Любой фиксиро- ванный тип Тип правого операнда Тип левого операнда (МТЕВЕЛ Любой фиксиро. ванный тип Деление Ссылки: вещественный тип 3.5.6, возбуждение исключений 11, диапазон подтипа индекса 3.6.1, длина массива 3.6.2, индексируемый тип 3.6, исключение СОМВТЯА(МТ ЕВВОЙ 11.1, ли.
митируемый тип 7.4.4, операция 4.5, операция типа 3.3, подтип индекса 3.6, предопределенная операция 4.5, пустой массив 3.6.1, размерность 3.6, символьный литерал 2.5, строковый литерал 2.6, тип 3.3, тип компоненты 3.3, числовой тип ЗД. Тяава 4 Умножение значения фиксированного типа на целое эквивалентно повторению операции сложения. Деление значения фиксированного типа на целое является приближенным и не меняет типа (см. 4.5.7). Две специальные операции умножения и деления, применимые к операндам любых фиксированных типов, описаны в предопределенном пакете ЗТАМОАНО (они не могут быть переиме. нованы или даны в качестве фактических параметров настройки).
Операция Тип левого Тип правого Тип результата операнда операнда Умножение Любой фиксиро. ванный тип Любой фиксиро- ванный тип Универсальный фикси- рованный тип Деление Любой фиксиро- Любои фиксиро. Универсальный фикси. ванный тип ванный тип рованный тип Операнды умножения могут быть одного и того же или различных фиксированных типов, а тип результата — анонимный предопределенный универсальный фиксированный тип, де. льта которого произвольно мала.
Результат любого такого умножения всегда должен быть явно преобразован в значение некоторого числового типа. Это обеспечивает явное управле. ние точностью вычислений. То же относится к делению значения фиксированного типа на значение фиксированного типа. Никакие другие операции для типа универсальный фик. сированный не определены. Исключение М(!МЕН!С ЕННОН возбуждается операциями целого деления гепз и глоб, если правый операнд равен нулю. Примеры: 1: 1мтевея:= 1; ,1: 1МТЕОЕй:= 2; К: !МТЕОЕЯ: 3; Х: ЯЕА1. Фвйе В:= 1.0; У: ЯЕАЬ 4!В!М 6:= 2.0; — см.
3.5.7 Г: ЕЯАСТЮМ вейе 0.0001:= 0.1; — см. 3.5.9 О: ГЯАСТ!ОМ вейе 0.0001;= 0.1; Значение Тип результата Выражение РНАСТЮМ (Р О! 0.01 НЕА! (4! ° У 4.0 Примечание. Для положительных А и В частное задается выражением А(В, а остаток от деления А на В задается А звгп В. Операция тегп удовлетворяет следующим соотношениям: А мял (-В! = А мсдп В (-А! гши В = -!А пия В! Для некоторого целого К справедливо следующее тождество: А ее а = (А - К*В! пюв В Соотношения между делением нацело; остатком и вычетом по модулю иллюстрируются следующей таблицей: 1 *,! к(з К глоб 3 Х/У Е/2 3 Е Р ° Ь 2 1 1 0.5 0.05 0.3 0.01 Тот же, что тип ! и 3, т.е.
!МТЕОЕН Тот же, что тип К и 3, т.е. !МТЕОЕН Тот же, что тип К и 3, т.е. !МТЕОЕН Тот же, что тип Х и У, т. е. НЕА!. Тот же, что тип Г, т. е, РНАСТЮМ Тот же, что тип Р, т.е. ГНАСТЮМ Универсальный фиксированный требуется преобразование ЕНАСТЮМ в результате преобразования НЕА(., как и тип обоих операндов после преобразования Имена и вы вжеппя А В А/В Амтв Апмвв А В А/В Агпгпв Апмвб Ссылки: базовый тип 3.3, возбуждение исключений 11, дельта фиксированного типа 3.5.9, исключение мцмеВ(с еВВОВ 11.1, описание зд, описание переименования 8.5, плавающий тип 3.5.7, предопределенная операция 4.5, предопределенный пакет ВТАМОАВО 8.6, преобразо.