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

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

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

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

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

Следующие логические операторы определены для каждого булевого типа T, для каждого модульного типа T и для каждого одномерного массива типа T, компоненты которого имеют булевый тип:
function "and"(Left, Right : T) return T
function "or" (Left, Right : T) return T
function "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