Logo

5 декабря 2013 г.

Цикл «до» и цикл «паук»

Раз цикл Дейкстры — многоуровневая форма цикла «пока», должен существовать его зеркальный аналог в форме цикла «до» с несколькими ветвями. В литературе он известен как цикл «паук».

При разработке языка Кантор оператор многоуровневого «до» был выведен эмпирически, а его описание и сам термин «паук» найдены позже. На момент написания статьи Википедия утверждает, что цикл «паук» ни в одном языке программирования пока не реализован, поэтому Кантор вполне может стать первым языком с циклом «паук».

В языке Кантор пока принято, что циклы имеются только в декларативном синтаксисе.

Цикл «до»

В форме с одной ветвью оператор repeat имеет вид обычного цикла «до»:
repeat
  ветвь;
until условие;
Цикл repeat — блочный оператор, поэтому операторы его ветвей разделяются точкой с запятой. Краткая форма repeat в Канторе — единственный блочный оператор, не оканчивающийся обязательным end.

Вырождение цикла «до» в бесконечный цикл

Использование цикла «до» в реальном программировании требует выполнения завершающих действий перед выходом — эпилога. Цикл «до» при этом вырождается в бесконечный, требуя дополнительных механизмов выхода из него. Традиционное решение — оператор досрочного выхода.

О вырождении цикла «до» в бесконечный наверняка знали разработчики языка PL/SQL. В PL/SQL цикл «до» отсутствует вовсе, зато имеется бесконечный do loop и оператор досрочного выхода exit when, который пишется столько раз, сколько разных условий (ветвей) выхода имеется.

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

Цикл «до» с эпилогом

Введение эпилога — первый шаг по адаптации цикла «до» к форме, не требующей оператора досрочного выхода. Цикл «до» с эпилогом имеет в Канторе следующий вид:
repeat
  ветвь;
until условие then
  эпилог;
end;
В этой форме после условия выхода until пишется ключевое слово then, за которым идут операторы эпилога, разделенные точкой с запятой. В конце эпилога ставится обязательный end.

Цикл «паук»

Оператор repeat с эпилогом легко расширяем до формы с несколькими ветвями. Дополнительные ветви начинаются ключевым словом else и оканчиваются собственным until и условием выхода, после которого также идет эпилог:
repeat
  ветвь;
until условие then
  эпилог;
else
  ветвь;
until условие then
  эпилог;
else
  ветвь;
until условие then
  эпилог;
end;
Полная форма оператора repeat не позволяет пропустить эпилог какой-либо ветви, кроме последней. В рамках проекта высказана гипотеза, что принятая в Канторе запись является естественной для цикла «паук», и надобности в пропуске эпилогов промежуточных ветвей не возникнет. В будущем гипотеза будет проверена на практике.

После исключения циклов из синтаксиса ключевые слова repeat и until больше не подсвечиваются.

Комментариев нет :

Отправить комментарий

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.