Spec-Zone.ru › Ada 2005
Справочник по Ada 2005

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

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

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

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

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

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

Формы управления короткого замыкания and then и or else дают тот же результат, что и соответствующие предопределённые операторы and и or для булевых типов, за исключением того, что левый операнд всегда оценивается первым, а правый операнд не оценивается, если значение левого операнда определяет результат.
Для логических операторов над массивами проверяется, что для каждого компонента левого операнда существует соответствующий компонент правого операнда и наоборот. Также проверяется, что каждый компонент результата принадлежит типу компонента. Исключение Constraint_Error возникает, если любая из этих проверок завершается неудачно.
ПРИМЕЧАНИЯ
12 Стандартное значение логических операторов определяется следующей таблицей истинности:
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