Управляющие структуры помимо стандартных условий и циклов?

Языки структурированного программирования обычно имеют несколько структур управления, например , а , 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.

И нет, «функциональное программирование» на самом деле не является структура управления.

7
задан Community 23 May 2017 в 12:23
поделиться