Существует несколько специальных инфиксных операций: "and" (и), "or" (или), и "xor" (исключающее или), используемых в их обычном смысле. Они принимают в качестве параметров две величины типа Boolean и возвращают значение того же типа. Результатом выражения `True and False' будет False, тогда как результатом выражения `True or False' будет True. 'Исключающее или' дает True, если любой из двух операндов является истинным, но не оба одновременно.
Существует также префиксная операция ``not''. Если булевская переменная А имеет значение True, то `not A' примет значение False.
Если у вас возник вопрос о том, какой результат будет иметь любая комбинация операндов, то ниже приведена полная таблица истинности:
--- Если ---+------------------- То ----------------- A B | (A and B) (A or B) (A xor B) (not A) True True | True True False False True False | False True True False False True | False True True True False False | False False False True
Обычно в Ada данные выражения будут преобразованы в порядке, наиболее эффективном для данного компьютера. Если необходимо преобразовывать их в определенном порядке и прекратить преобразования, когда ответ уже известен, существует такой вид операций `and' и `or', как сокращенные логические операции. Они могут быть выполнены только слева направо, и никак иначе. Операции && и || языка С работают точно также. Операция `and' сокращенного типа - это операция `and then', а операция `or' сокращенного типа - `or else'. Например, когда необходимо выполнить что-то, если К не ноль и 1.0/K больше, чем В, то очевидно, что сначала необходимо проверить первое условие, и лишь затем - второе:
if K /= 0 and then 1.0/Float(K) > B then ...
Какое из следующих выражений принимает значение True?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 6 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s6s2.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк