Языки структурированного программирования обычно имеют несколько управляющих структур, таких как while
, if
, for
, do
, switch
, break
и continue
, которые используются для выражения высокоуровневых структур в исходном коде.
Однако есть много других структур управления, которые были предложены на протяжении многих лет, но не вошли в современные языки программирования. Например, в статье Кнута "Структурированное программирование с Перейти к операторам", стр. 275, он ссылается на управляющую структуру, которая выглядит как урезанная версия обработки исключений:
loop until event1 or event2 or ... eventN
/* ... */
leave with event1;
/* ... */
repeat;
then event1 -> /* ... code if event1 occurred ... */
event2 -> /* ... code if event2 occurred ... */
/* ... */
eventN -> /* ... code if eventN occurred ... */
fi;
Это кажется полезной структурой, но я не видел ни одного языка, который фактически реализует ее, кроме как частный случай стандартной обработки исключений.
Точно так же Эдсгер Дейкстра часто использовал управляющую структуру, в которой один из многих фрагментов кода выполняется недетерминировано на основе набора условий, которые могут быть истинными. Вы можете увидеть это на странице 10 его статьи о гладкой сортировке. , среди прочих мест. Пример кода может выглядеть так:
do
/* Either of these may be chosen if x == 5 */
if x <= 5 then y = 5;
if x >= 5 then y = 137;
od;
Я понимаю, что исторически C повлиял на многие современные языки, такие как C++, C# и Java, и поэтому многие структуры управления, которые мы используем сегодня, основаны на небольшом наборе, предлагаемом C. Однако о чем свидетельствует этот другой SO-вопрос, мы, программисты, любим думать об альтернативных структурах управления, которые мы хотели бы иметь, но не поддерживаются многими языками программирования .
Мой вопрос заключается в следующем: существуют ли в настоящее время распространенные языки, поддерживающие структуры управления, радикально отличающиеся от структур управления в стиле C, о которых я упоминал выше? Такая структура управления не обязательно должна быть чем-то, что может t быть представлен с использованием стандартных структур C — почти все можно закодировать таким образом — но в идеале я хотел бы пример чего-то, что позволяет вам подходить к определенным задачам программирования принципиально иначе, чем позволяет модель C.
И нет, «функциональное программирование» на самом деле не является управляющей структурой.
var found = false
. Подробнее. - person CamelCamelCamel   schedule 31.07.2011