> -- Peter Almazov писал(а):
> Вы сначала определитесь с предусловиями, а потом уж пишите программу. А то получаются рекомендации уровня сантехника, а не математика - "Так лучше возьмет".

Программист всегда должен исходить из того, что предусловие может быть нарушено надсистемой.
Именно для этого мы используем ASSERT, не так ли?
Но я не могу написать до цикла ASSERT("в тексте есть вьшка").
Значит, хорошо бы составить цикл так, чтобы он обеспечил аварийный останов по нарушению предусловия.

> -- Цитата:
> Кроме этого, еще раз наглядно демонстрируется "ценность" шаблона "Линейный поиск им. Ткачева". Предлагается писатьWHILE ~(rd.view # NIL) DO
Это не линейный поиск. Это простой линейный проход (линейный просмотр Дейкстры).

Не предлагается. Я не имею окончательного мнения на сей счёт. Пробую и так, и так.
Для меня критерий "правильности" всегда за пределами формализма. Формализм - способ выражения семантики.
По семантике мозг строит цикл "пока не нашли требуемый элемент". Например, WHILE rd.view # x DO.. "не равен искомому". У нас искомый элемент - любой. Любой - "не NIL". Не-нашли-не-NIL. WHILE ~ANY_VALID(rd.view) DO .. Отсюда и двойное отрицание.
Если мы будем записывать выкладки под ход мыслей, оно в таких случаях будет возникать. Вопрос в том, упрощать его или нет. Аргумент "за" - короче, как бы правильней и т.п. Аргумент "против" - если неупрощённый вариант ближе к исходной мысли, из которой спроектирован цикл, то он понятнее для чтения-проверки, может быть. А может и не быть.