Справочное руководство по языку Ада-83


Агрегаты - часть 5


Границы агрегата массива без выбора

otners

определяются следующим образом. Для агрегата с именованными сопоставлениями границы определяются наименьшим и наибольшим из заданных выборов. Нижняя граница позиционного агрегата определяется соответствующим ограничением индекса, если агрегат помещен в один из контекстов а), б) или в); в противном случае нижняя граница задается как S'FIRST, где S — подтип индекса; в обоих случаях верхняя граница определяется числом компонент.

Вычисление агрегата массива, не являющегося подагрегатом, производится в два шага. На первом шаге вычисляются выборы данного агрегата и его подагрегатов, если они есть, в порядке, не определенном в языке. На втором — вычисляются выражения в сопоставлениях компонент в порядке, также не определенном в языке. Выражение в именованном сопоставлении вычисляется один раз для каждой сопоставляемой компоненты. Вычисление подагрегатов состоит из этого второго шага (первый шаг пропускается, так как выборы уже были вычислены).

При вычислении непустого агрегата массива производится проверка того, что значения задаваемых выборами индексов принадлежат соответствующему подтипу индекса, а также того, что значение каждой подкомпоненты агрегата принадлежит подтипу этой подкомпоненты. Для n-мерного агрегата производится проверка того, что все (n - 1)-мерные подагрегаты имеют одинаковые границы. Если хотя бы одна из этих проверок дает отрицательный результат, возбуждается исключение CONSTRAINT_ERROR.

Примечание.

Допустимыми константами агрегата массива с выбором

others

являются те, в которых границы такого агрегата всегда известны из контекста.

Примеры агрегатов массивов с позиционными сопоставлениями:

(7, 9, 5, 1, 3, 2, 4, 8, 6, 0) ТАВLЕ'(5, 8, 4,1, others => 0) -- см. 3.6

Примеры агрегатов массивов с именованными сопоставлениями:

(1 .. 5 => (1 .. 8 => 0.0)) —- двумерный (1 .. N => new CELL) -— N новых ячеек, в частности для N = 0

ТАВLЕ'(2 | 4 | 10 => 1, others => 0) SСHEDULE'(MON ..




Начало  Назад  Вперед



Книжный магазин