Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Условные присваивания. ⇐ ПредыдущаяСтр 2 из 2
Условное присваивание – это обобщение идеи одновременного присваивания, которое позволяет анализировать операторы IF напрямую, подобно тому как одновременное присваивание позволяет легче анализировать операторы BEGIN. Частное значение оператора IF имеет две возможности, определяемые по < условию>. Условное присваивание показывает альтернативы вместе с логическим условием, которое определяет выбор между ними. Синтаксис условного присваивания также не является частью синтаксиса Паскаля, но может быть присоединен к оператору в комментариях.
Условные присваивания могут быть определены рекурсивно по следующим правилам:
Условное присваивание, которое оказывается одновременным присваиванием C может быть записано в виде (T –> С) [T = TRUE].
Условное присваивание будет в форме (b1 -> c1) | (b2 -> c2)| … | (bn -> cn) для любого количества условий (b1, b2, …, bn) и условных присваиваний (c1, c2, …, cn) его значением будет первое условное присваивание, скажем c1, такое что: i. все логические условия до bi т.е (b1, b2,. …, bi-1) имеют значение F в состоянии s, и ii. Логическое условие bi имеет значение T
Значение не определено для состояния s, в любом из следующих случаев: i. Ни одно из логических условий b1, b2,. …, bn не принимает значения T в s; ii. Первое логическое выражение, которое не принимает значение F не определено на s. iii. условное присваивание, выбранное логическим выражением, не определено на s.
Например, оператор IF IF V1 < = V2 THEN V1: =’2’ ELSE BEGIN V1: = V2; V2: = ‘A’ END имеет условное присваивание: (V1 < = V2 - > V1: = ‘2’) | (T -> V1, V2: = V2, ‘A’) выражая знание, что для начального состояния s при V1 < = V2 (s) = T, результат описывается одновременным присваиванием: V1: = ‘2’ если V1 < = V2 (s) = F, то V1, V2: = V2, ‘A’ Описывает результат, потому что его условие T.
С другой стороны, (NOT (EOLN) -> Ch: = ‘Z’) | (EOF -> Ch: = ‘A’) описывает выражение, которое прерывает состояние выполнения {INPUT·< All□ gone/, ††, R>, …} потому что EOLN не определено на этом состоянии, поэтому и условное присваивание не определено.
Логические условия называются охранниками присваиваний, в общем виде каждый элемент состоит из защищенного присваивания.
В случае, когда охранник всегда пропускает, выражение может быть записано без него, например: ((V1 = V3) OR (V1 < > V3) -> Ch1, V3: = ‘A, ’V1,) это то же самое, что одновременное присваивание: (Ch1, V3: = ‘A’, V1) Такое условное присваивание называют незащищенным, поскольку оно всегда выполняется.
Например, оператор IF, рассмотренный выше может быть записан как: {(V1 < = V2 - > V1: = ‘2’) | (V1, V2: = V2, ‘A’)} IF V1 < = V2 THEN V1: =’2’ ELSE BEGIN V1: = V2; V2: = ‘A’ END Второй компонент условного присваивания является незащищенным. Он может быть записан как: (V1 < = V2 - > V1: = ‘2’) | (V1 > V2 -> V1, V2: = V2, ‘A’) Если первый охранник принимает F, второй должен принимать T.
Условное присваивание < >: = < > в котором не изменяются значения переменных, с защитником T (T -> < >: = < >) может быть записано просто () и выражает значение пустого оператора, функцию эквивалентности. Включение такого выражения в конце условного присваивания гарантирует нам, что значение будет всегда определено. Если все предыдущие защитники вычисляются в F, значение будет I благодаря последнему выражению.
Оператор IF без ELSE может быть описан условным присваиванием, как показано в следующем примере: {(V1 < V2 -> V1: = V2) | ()} IF V1 < V2 THEN V1: = V2
Последний элемент, пустое одновременное присваивание, важен, поскольку когда условие равно F, оператор IF имеет значение функции эквивалентности. (V1 < V2 -> V1: = V2) не является значением данного оператора IF, потому что оно утверждает, что когда значение V1 не предшествует V2, оператор IF не определен, что не соответствует действительности.
|