Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

4.5.1 Логические операторы и формы управления короткого замыкания

Правила разрешения имен

Выражение, состоящее из двух отношений, соединённых операторами and then или or else (форма управления короткого замыкания), должно иметь тип boolean; ожидаемый тип для обоих отношений — тот же тип boolean.

Статическая семантика

Следующие логические операторы определены для каждого типа boolean T, для каждого модульного типа T и для каждого одномерного массива типа T, тип компонента которого — boolean:
function "and"(Left, Right : T) return T
function "or" (Left, Right : T) return T
function "xor"(Left, Right : T) return T
Для типов boolean предопределённые логические операторы and, or и xor выполняют соответственно операции конъюнкции, включительно-дизъюнкции и исключающей дизъюнкции.
Для модульных типов предопределённые логические операторы определяются побитово, используя двоичное представление значений операндов для получения двоичного представления результата, где ноль соответствует False, а единица — True. Если этот результат выходит за пределы базового диапазона типа, выполняется окончательное вычитание модуля для введения результата в базовый диапазон типа.
Логические операторы над массивами выполняются покомпонентно над соответствующими компонентами (как для равенства — см. 4.5.2), используя предопределённый логический оператор для типа компонента. Границы результирующего массива совпадают с границами левого операнда.

Динамическая семантика

Формы управления короткого замыкания and then и or else дают тот же результат, что и соответствующие предопределённые операторы and и or для типов boolean, за исключением того, что левый операнд всегда вычисляется первым, а правый операнд не вычисляется, если значение левого операнда определяет результат.
Для логических операторов над массивами проверяется, что для каждого компонента левого операнда существует соответствующий компонент правого операнда и наоборот. Также проверяется, что каждый компонент результата принадлежит типу компонента. Если любая из вышеупомянутых проверок не пройдена, генерируется исключение Constraint_Error.
ПРИМЕЧАНИЕ Обычный смысл логических операторов задаётся следующей таблицей истинности:
A B (A and B) (A or B) (A xor B)

True True True True False
True False False True True
False True False True True
False False False False False

Примеры

Примеры логических операторов:
Sunny or Warm
Filter(1 .. 10) and Filter(15 .. 24) -- см. 3.6.1
Примеры форм управления короткого замыкания:
Next_Car.Owner /= null and then Next_Car.Owner.Age > 25 -- см. 3.10.1
N = 0 or else A(N) = Hit_Value


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API