構造化プログラミング言語には通常、、、、、、、などのいくつかの制御構造がありwhile
、ソースif
コードfor
で高レベルの構造を表現するために使用されます。do
switch
break
continue
ただし、何年にもわたって提案されてきた、現代のプログラミング言語に移行していない他の多くの制御構造があります。たとえば、Knuthの論文「GoToステートメントを使用した構造化プログラミング」(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;
これは便利な構造のように見えますが、標準の例外処理の特殊なケースとして、実際にそれを実装している言語は見たことがありません。
同様に、Edsger Dijkstraは、多くのコードの1つが、真である可能性のある一連の条件に基づいて非決定的に実行される制御構造を使用することがよくありました。これは、smoothsortに関する彼の論文の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モデルで許可されている方法とは根本的に異なります。
いいえ、「関数型プログラミング」は実際には制御構造ではありません。