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