> -- alexus писал(а):
> Но выполнять группировку данных и их анализ (в результате которой возможно придется прервать цикл)... в том же заголовке... садомазохизм, IMHO. Логика обработки имеет ярко выраженные стадии: фильтрация и анализ, что и моделируется циклом. И следует хорошо подумать, прежде чем, "улучшать" эту логику (в угоду каким-то принципам), делая ее при этом менее прозрачной/понятной.

Любую задачу со сложной обработкой данных я и не подумаю засовывать в одну процедуру, а разобью помельче.
Вообще, иногда делаю что-нибудь типа сканера виртуальной последовательности, чтобы цикл верхнего уровня сводился к простейшему вызову операции sc.GetElem; WHILE sc.done & ~SomePredicate(....) DO что-нибудь делаем; sc.GetElem END;

Условно говоря. Т.е. сделаю некий "фасад", за "ручки" которого будет дёргать цикл простейшей структуры.

Если у меня не получается построить простой цикл в несколько строк, то для меня это верный признак, что надо вводить какой-то уровень абстракции под циклом. Как минимум процедуры, а то и, как сказал выше, какой-то тип для работы с виртуальной последовательностью. (Благо Оберон позволяет объекты-значения).