> -- adimetrius писал(а):
> Я полагаю, варианты с WHILE/done и LOOP эквиваленты, и оба нехороши тем, что, фактически, несколько точек выхода из конструкции. Что нарушает принцип стрктрного программирования: у каждой штуковины один вход - один выход. В LOOP они отмечены словом EXIT, в WHILE/done - перевычислением done. В обоих случаях нужно "следовать" за вычислителем, чтобы понять, почему мы тут оказались.С предикатной процедурой была бы совсем другая - ясная - песня: один вход - один выход. Если, канешн, она будет без особо побочных эффектов ).
Предикатные процедуры в подобной задаче будут сплошь с побочными эффектами (в общем, не предикаты как таковые по сути). Вспомнилась задачка по поводу:
*http://oberspace.org/index.php/topic,425.msg13047.html#msg13047
*http://oberspace.org/index.php/topic,425.msg13278.html#msg13278

По ссылкам выше тело цикла состоит лишь из инкремента счётчика, а все реальные "циклические действия" -- внутри "предикатов". На блок-схеме/Дракон-е все "действия" были бы упрятаны в "вопросах" (которые формально должны заниматься лишь опросом текущего состояния, да еще в приправу само выражение отношения следования действий по сути есть паразитизм на short-circuit evaluation логических операций).

Тем не менее, решение на псевдопредикатах, по-видимому, будет самым распространённым (оставляя за рамками аля for-ы с break/return-ами), а то и вынужденным при забаненном операторе вида LOOP с EXIT.
Аналогично частенько такие "монады" выстраиваются и в условиях для "if".
Но, всё же, показать реальный цикл иногда нужно (вероятно, в этом суть исходного тезиса "накладно применять предикаты").