Конспект установочных лекций по комплексному курсу Информатика, Теория информации

       

Условные выражения


Пусть В - булевское выражение (выражение типа bool) и пусть Е, Е' -любые выражения одного и того же типа s; тогда

if В then E else Е' fi есть условное выражение типа s. Условное выражение по своему смыслу соответствует различению случаев в математике. Если булевское выражение В имеет значение "истина", то значение условного выражения равно значению выражения Е, а если выражение В имеет значение "ложь", то значение условного выражения равно значению выражения Е'. Если В не имеет какого-либо определенного значения, то значение условного выражения нe определено.

Используется следующий синтаксис для условного выражения:

<условное_выражение>::==if <выражение> then <выражение>

{elif <выражение> then <выражение>}* else <выражение> fi

Возможность записывать с помощью elif последовательность условных выражений ("каскад разветвлений") вводится лишь из соображений сокращения записи. Значение и дополнительные условия описываются словесно.

Для условного выражения предполагаются следующие дополнительные условия:

·

условие В есть выражение типа bool,

·         Е и Е' имеют одинаковые типы,

·         идентификаторы, встречающиеся в В, Е и Е', используются с одними и теми же типами.

Выражения Е, Е' называют также ветвями условного выражения.

Условные выражения, в частности, могут быть вложенными - в этом случае говорят о каскаде разветвлении. Обозначение



... elif В then Е else Е' fi используется как сокращение для записи (является в смысле математической и операционной семантики эквивалентным) . else if В then Е else Е' fi fi и допускает более удобный способ записи для каскада разветвлений.

Пример (условные выражения).

if I <= 2 then 1 else 2 fi

if a then true else b fi

if a <= b then a else b fi

if a = b then a elif a < b then b - a else a - b fi

Значение условного выражения вычисляется следующим образом: сначала вычисляется условие, а затем вычисляется значение ветви, определяемой значением условия.
В соответствии с этим для вычисления значения условных выражении применяются следующие правила текстовых замен:

В

 В' => if В then Е else Е' fi
 if В' then Е else Е' fi

if true then Е else Е' fi
 Е

if false then Е else Е' fi
 Е'

Эти правила вычисления делают особенно ясным, что условие всегда вычисляется до вычисления ветвей. Это очень существенно, так как возможно, что вычисление одной из ветвей условного выражения не завершится. Так что если бы вычисление этой ветви начиналось сразу, то вычисление условного выражения не завершилось бы. хотя условие направило бы вычисления как раз но другой ветви, которая может привести и к завершающемуся вычислению. Отсюда становится ясным, почему необходимо введение условных ПТЗ.

Заметим, что условное выражение в определенной степени соответствует нестрогому

отображению: даже в том случае, когда выражение в одной из ветвей интерпретируется к
, значение условного выражения может быть отлично от
.

Семантика условных выражений описывается также достаточно точно с помощью следующих равенств:

if true then E else E' fi = E

if false then E else E' fi = E'

if В then E else E' fi = if
B then E' else E fi

if
 then E else E' fi =



Содержание раздела