ГОСТ Р И С 0 10303-11 — 2009
дого элемента исходной агрегированной структуры. Содержимое результирующей агрегированной струк
туры зависит от конкретного вида агрегированного типаданных:
a) Тип данных ARRAY: результирующий массив имеет такие же границы и базисный тип, что и исход
ный массив, но элементы данного массива объявлены какOPTIONAL. Изначально каждый элемент имеет
неопределенное (?) значение. Каждый элемент исходного массива,для которого logical_expression име
ет значение TRUE, помещается на такую же индексную позицию в результирующем массиве.
b
) Тип данных BAG: результирующий пакет имеет такие же базисный тип и верхнюю границу, что и
исходный пакет. Нижняя граница равна нулю. Изначально результирующий пакет является пустым. Каж
дый элемент исходного пакета, для которого logical_expression имеет значение TRUE, добавляется в
результирующий пакет.
c) Тип данных LIST: результирующий список имеет такие же базисный тип и верхнюю границу, что и
исходный список. Нижняя граница равна нулю. Изначально результирующий список является пустым.
Каждый элемент из исходного списка, для которого logical_expression имеет значение TRUE,
добавляется в конец результирующего списка. Порядок следования элементов исходного списка сохра
няется.
d) Тип данных SET:результирующий набор имеет такие же базисный тип и верхнюю границу, что и
исходный набор. Нижняя граница равна нулю. Изначально результирующий набор является пустым. Каж
дый элемент из исходного набора, для которого logical_expression имеет значение TRUE, добавляется в
результирующий набор.
П р и м е ч а н и е — Если исходная агрегированная структура является пустой, то результатом будет
пустая агрегированная структура.
Примеры
1 Пусть colour является определенным типом данных, имеющим в качестве базисного типа
ENUMERATION, включающий элементы pink и scarlet. В приведенном ниже фрагменте показано, как из
влечь из массива colour элементы, являющиеся либо pink, либо scarlet.
LOCAL
colours : ARRAY OF colour;
reds: ARRAY OF OPTIONAL colour;
ENDLOCAL;
reds := QUERY ( element <* colours | (element = pink) OR
( element = scarlet));
2 8 данном примере оператор запроса используется для проверки всех экземпляров объектного
типа данных point. Результирующий набор содержит все экземпляры объекта point расположенные в
начале координат.
RULE two_points_at_origin FOR (point);
WHERE
SIZEOF (QUERY(temp <’ point | temp = point(0.0,0.0,0.0))) = 2:
END_RULE;
8 данном примере показаны три неявных объявления. Первым является переменная point
которая неявно объявлена в заголовке RULE как набор всех экземпляров point Вторым является
переменная temp, в которую собираются последовательные элементы агрегированной структуры
point при выполнении оператора запроса. Третьим является конструктор point объявление которого
следует из объявления его объекта.
12.7 Ссылки
Когда элемент, видимый влокальной области видимости, должен использоваться локально, ссылки
на данный элемент должны осуществляться по идентификатору, объявленному для данного элемента.
12.7.1 Простые ссылки
Простая ссылка представляет собой просто имя (идентификатор), присвоенное элементу в текущей
области видимости.
Данным способом можно ссылаться на следующие элементы, причем на элементы, помеченные
одной звездочкой (*), данным способом можно ссылаться внутри выражения, а на объекты, помеченные
двумя звездочками (**). можно ссылаться как на конструктор (см. 9.2.6) или как на локальную переменную в
глобальном правиле (см. 9.6):
- атрибуты вобъявлении объекта*;
- константы *;
85