Раз цикл Дейкстры — многоуровневая форма цикла «пока», должен существовать его зеркальный аналог в форме цикла «до» с несколькими ветвями. В литературе он известен как цикл «паук».
При разработке языка Кантор оператор многоуровневого «до» был выведен эмпирически, а его описание и сам термин «паук» найдены позже. На момент написания статьи Википедия утверждает, что цикл «паук» ни в одном языке программирования пока не реализован, поэтому Кантор вполне может стать первым языком с циклом «паук».
В языке Кантор пока принято, что циклы имеются только в декларативном синтаксисе.
Цикл «до»
В форме с одной ветвью оператор 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», можно оставить комментарий от своего имени без предварительной регистрации.