
2.2. Формулы 119
Это верно и для последовательного разбора случаев, при кото-
ром
else
If не стянуты в
elsf.
Примеры:
begin if x > 0 then x
else
—x end (паскаль),
begin if x>0 then 1
else
if *>0 then 0
else
—1 end
(паскаль).
В стандартном паскале, однако, условные формулы, строго го-
воря,
не предусмотрены, в частности их нельзя подставлять в
другие формулы. Однако условные формулы запрятаны за та-
кими
конструкциями, как
begin if >условие< then >Res< <= >да-формула<
else
>Res< -<= >нет-формула< end,
где >Res< — это обозначение
результата,
см. 2.3.1.1.
Само
собой разумеется, что обе ветви альтернативы, да-
формула и нет-формула, должны иметь результат одного и
того же сорта (вида, типа), и тогда условная формула приво-
дит к тому же сорту. Далее, очевидно, что формуле
if >условие< then >да-формула<
else
>нет-формула< fi
эквивалентна
формула
if
~1
>условие< then >нет-формула<
else
>да-формула< fi
(перестановка
ветвей
альтернативы при отрицании условия).
Пример
лг + if х > 0 then x
else
— x fi
показывает, что условные формулы
могут
выступать как со-
ставная часть (простой) формулы — правда не в паскале.
Впрочем, такие формулы можно преобразовать к „обычному"
виду, перенося соответствующую операцию (это возможно, по-
скольку все операции у нас строгие) в да-формулу и в нет-фор-
мулу:
if х > 0 then х + х
else
х — х fi.
Применение
законов из вычислительной структуры Z даёт
окончательно
if x>0 then хХ%
else
0 fi.
При
работе с объёмистым, обширным разбором случаев — осо-
бенно
вложенного типа — весьма полезен так называемый „ме-
тод таблиц решений". Этому подходу близок (а функциональ-
но
тождествен) подход с использованием двузначных схем
(„алгебра схем"), см. гл. 4.