LINUX.ORG.RU

почему нет цикла с опосредованным условием?


0

0

существует цикл с предусловием: while(...) { ... }

существует цикл с постусловием: do { ... } while(...)

почему не существует цикла с опосредованным условием? что-то типа:

loop { ... loopcond(...) ... }

сейчас для реализации подобной штуки делается что-то типа:

while(1) { ... if(! (...) ) break; ... }

к тому же, при переходе к циклу с опосредованным условием две другие формы (с пред- и постусловиями) становятся просто не нужными

Это был риторический вопрос? :-)

Deleted
()

Бо костыль еси, проистекающий из неспособости мыслить в терминах структурного программирования. :) Коим и является брейк внутри цикла.

Uncle_Theodore ★★
()

>почему нет цикла с опосредованным условием?
>loop { ... loopcond(...) ... }

#define loop while(1)
#define loopcond(cond) if((cond)) break

Не?

stpg
()

Вообще я бы не поощрял подобный стиль даже с условным брейком. ИМХО намного правильнее, когда сразу при входе в цикл программист перечисляет при каких условиях будет произведён выход из цикла.

anonymous
()
Ответ на: комментарий от Uncle_Theodore

>неспособости мыслить в терминах структурного программирования. :)

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

anonymous
()
Ответ на: комментарий от lv

.. да да - и не надо про брэйнфак хи-хи разводить ...

lv ★★
()

Большое +1. Я бы сказал, что для цикла достаточно конструкций loop { }, loop label { }, break, break label, continue, continue label;

У меня break-и внутри цикла случаются иногда чаще чем в начале или в конце.

И, да, к conditional variables и прочим костылям я отношусь резко отрицательно, т.к. они ухудшают читабельность кода.

Legioner ★★★★★
()
Ответ на: комментарий от mo3r

Для заметки Адские циклы.
Есть просто 
loop ... end loop;
есть
while <Boolean> loop ... end loop;
и есть 
for i in [reverse] <smth range> loop ... end loop;
В любое место любого цикла можно вставить 
exit;
или
exit when <Boolean>;
--
Named_Loop:
loop
   for i in 1 .. 10 loop
      exit when i = j; -- выход из for
      exit Named_Loop when i = k; -- выход из внешнего цикла
   end loop;
end loop Named_Loop;

anonymous
()
Ответ на: комментарий от Legioner

> Большое +1. Я бы сказал, что для цикла достаточно конструкций loop { }, loop label { }, break, break label, continue, continue label;

Поверхностно мыслишь. Достаточно goto label, остальное - гнилые выдумки рефлексирующей интеллигенции.

anonymous
()
Ответ на: комментарий от lv

> ... потому что Оккам рулит...

Оккам в лучшем случае делает вдоль...

В данном случае, вроде бы, предлагается не изобрести новую сущность, а передвинуть имеющуюся на новое место...

Uncle_Theodore ★★
()
Ответ на: комментарий от Uncle_Theodore

> Оккам в лучшем случае делает вдоль...

Ему нельзя - он, вроде как, монах :)

> В данном случае, вроде бы, предлагается не изобрести новую сущность, а передвинуть имеющуюся на новое место...

Ага - но и про старое место тоже, как я понял, предлагается не забывать. Вот и получается - новая синтаксическая конструкция, которой, как раз-таки, следует "сделать вдоль".

lv ★★
()
Ответ на: комментарий от generatorglukoff

> наоборот, выкинуть

Перечитал первый пост ещё раз, лучше понял мысль :) Тогда мой ответ - не знаю :)

lv ★★
()
Ответ на: комментарий от anonymous

> Для заметки Адские циклы.

И в PL/SQL, который от Ады как бы растет.

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

> В Оккаме таких циклов нету.

:)) Я имел в виду того, который с лезвием... но, как выяснилось - зря имел :)

lv ★★
()

> почему не существует цикла с опосредованным условием? что-то типа:

возьми Nemerle и напиши себе какие хошь циклы

anonymous
()
Ответ на: комментарий от anonymous

>возьми Nemerle и напиши себе какие хошь циклы

Не, в nemerle не получится сделать лисповский iter. Или получится?

mo3r
()

А чем этот loopcond отличается от break? К чему всве это (=

vasily_pupkin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.