私はすべての主題に関するいくつかの記事を読みましたが、私は完全に違いを理解していません。
構造化プログラミングは、機能的、手続き的、その他多くのことを含むと私が思う古い用語です。これは基本的に、命令から命令に直接ジャンプするのではなく、明示的な制御フロー構造を使用することを意味します。
関数型プログラミングと手続き型プログラミングはどちらも、その意味で構造化パラダイムです。関数型プログラミングは宣言型プログラミングでもあります-コードに与えられた構造はその意味に対応しています-プログラムは世界の状態を変える関数です。手続き型プログラミングは、OO JavaやC++などの言語を含むC言語またはその子孫での「典型的な」プログラミング」とみなすものです。プログラムは一連の命令。連続して実行され、途中でサブプロシージャが呼び出されます。
または、それが有名に説明されているように:
関数型プログラミングは、数学者に問題を説明するようなものです。命令型プログラミングは、馬鹿に指示を与えるようなものです。
--- arcus, #scheme on Freenode
関数型プログラミングは、関数をファーストクラスの要素として使用しています。高階関数を利用する(関数の取得および/または戻り)。強力な構成と十分に因数分解されたコードにつながります。 FPの純度の側面にも注目する人もいます。つまり、同じ入力が与えられた場合、関数は常に同じ結果を返す必要があります。これらはFPの2つの基本的な柱であると私は信じています。また、副作用を回避することは、マシンレベルのロード/ストアの指示から少し離れて本質的に抽象化することだと思います。
構造化プログラミングは、Djikstraの「GotoConsideredHarmful」の論文に戻ります。これは、gotoに頼るのではなく、if/then/else/Elif構造、do/while/until/forループなどを使用することを意味します。それは本質的に、比較/分岐マシンレベルの命令から少し離れて抽象化しています。構造化プログラミングは、関数型プログラミングと手続き型プログラミングの両方に直交しています。
手続き型プログラミングとは、副作用を残した一連の「ステートメント」(「式」ではなく)で一般的に構成される命令型の「サブルーチン」(純粋な「関数」ではなく)を使用したプログラミングのことだと思います。