Языки структурированного программирования обычно имеют несколько структур управления, например , а
, if
, для
, do
, switch
, break
и continue
, которые используются для выражения структур высокого уровня в су rce code.
Однако есть много других структур управления, которые были предложены на протяжении многих лет, но не вошли в современные языки программирования. Например, в статье Кнута « Структурированное программирование с помощью операторов перехода », стр. 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, о которых я упоминал выше? Такая структура управления не должна быть чем-то, что не может быть представлено с использованием стандартных структур C - в значительной степени так можно закодировать все, что угодно, но в идеале мне нужен пример чего-то, что позволяет вам подходить к определенным задачам программирования принципиально другим способом, чем позволяет модель C.
И нет, «функциональное программирование» на самом деле не является структура управления.