ГОСТ Р И С 0 10303-11 — 2009
e) если существует такой ссылочный путь s. что NOT EXISTS(s(/)) или NOT EXISTS(s(r)). то
/ = г имеет значение UNKNOWN;
f) в ином случае I = г имеет значение TRUE.
Примеры
1 Представленный ниже алгоритм является одной из возможных реализаций описанной выше
проверки сравнения значений. Данный алгоритм приведен для иллюстрации и не предназначен для
представления какой-либо конкретной реализации.
Пусть в данном алгоритме I и г являются переменными типа GENERIC:
a) инициализируем I в качестве экземпляра объекта левой части, a r e качестве экземпляра
объекта правой части;
b
) если t и г представляют один и тот же экземпляр, то есть I :=: г, то выражение имеет
значениеTRUE;
c) инициализируем пустой списокplist. который будет содержать упорядоченные пары идентифи
каторов экземпляров объектного типа данных.
П р и м е ч а н и е — Представление идентификаторов экземпляров определяется реализацией;
d) сравним ( и г, используя определенный ниже алгоритм глубинного равенства;
e) выражение будет иметь значение, возвращаемое алгоритмом глубинного равенства.
Алгоритм глубинного равенства:
a) если I, г или оба экземпляра имеют неопределенное (?) значение, то алгоритм возвращает
значение UNKNOWN;
b) если TYPEOF(*)<>TYPEOF(r), то алгоритм возвращает значение FALSE;
c) если I и г не являются экземплярами объектного типа данных, то алгоритм возвращает
результат выражения 1=г, используя соответствующую проверку равенства;
d) если I и г представляют один и тот же экземпляр объектного типа данных, то есть
I :=: г. то алгоритм возвращает значение TRUE;
e) если пара экземпляров (1,г) присутствует в списке plist, то алгоритм возвращает значение
TRUE;
f) если пара экземпляров (/.г) не присутствует в списке plist, то выполняются следующие дей
ствия:
1) в список plist добавляется пара (I ,г),
2) для каждого атрибута а. определенного для t и г. сравниваются I.а и г.а с использованием
алгоритма глубинного равенства, полагая, что {=l,a и г=г.а.
П р и м е ч а н и е — При этом используется рекурсивный вызов.
3)если результатом алгоритма глубинного равенства для какого-либо из атрибутов на шаге по
пункту 2) перечисления е) 6ydem FALSE, то в целом алгоритм также возвращает значение FALSE.
В противном случае, если алгоритм возвращает значение UNKNOWN для какого-либо из атрибутов, то
общим результатом также будет значение UNKNOWN. Иначе, алгоритм возвращает значение TRUE.
П р и м е ч а н и е — Данный алгоритм обеспечивает, что если хотя бы один из результатов сравнения имеет
значение FALSE, то общий результат имеет значение FALSE. Если все результаты сравнения имеют значение
TRUE, то общий результат также имеет значение TRUE. Если результат какого-либо сравнения имеет значение
UNKNOWN, а вседругие результаты имеют значение TRUE, то общий результат имеет значение UNKNOWN.
2Локальные переменные И и \2 имеют тип loop_of_integer; при выполнении указанных в данном
примере операторов присваивания, значения данных переменных не равны.
ENTITY loop_of_integer;
int: INTEGER;
next : loop_of_integer;
END ENTITY;
LOCAL
il, i2 : loop_of_integer;
END LOCAL:
И := loop_of_integer(5,loop_of_integer(3.SELF));
i2 := loop_of_integer(3,loop_of_integer(5.SELF));
IF И = i2 THEN - - результатом сравнения является FALSE
Сравнение значений объектов может быть применено к экземплярам объектов и экземплярам
сгруппированных объектов (см. 12.7.4). Для экземпляров объектовдолжны сравниваться атрибуты всех
73