Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






 

Условное присваивание – это обобщение идеи одновременного присваивания, которое позволяет анализировать операторы IF напрямую, подобно тому как одновременное присваивание позволяет легче анализировать операторы BEGIN. Частное значение оператора IF имеет две возможности, определяемые по < условию>. Условное присваивание показывает альтернативы вместе с логическим условием, которое определяет выбор между ними. Синтаксис условного присваивания также не является частью синтаксиса Паскаля, но может быть присоединен к оператору в комментариях.

 

Условные присваивания могут быть определены рекурсивно по следующим правилам:

  1. Одновременное присваивание это условное присваивание.
  2. Если b логическое условие b и с – условное присваивание, то (b -> c) является условным присваиванием.
  3. Если b логическое условие b и с и d – условные присваивания, то (b -> c) | d является условным присваиванием.

Условное присваивание, которое оказывается одновременным присваиванием 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 не определен, что не соответствует действительности.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал