関数型言語から得られたコードは、非関数型言語でさまざまな程度で見られる多くの機能を使用します。ガベージコレクションは一般的な使用法になりました。末尾呼び出しの最適化は、GCCおよびVC++で行われます。
ただし、クロージャは関数型プログラミングの特徴です。片方がもう片方なしでは見えません。純粋関数型言語のみを参照するように「関数型言語」を定義する場合、関数型プログラミングをサポートする命令型言語(たとえば、JavascriptとScheme(関数型パラダイムがほとんどですが、技術的に必須です)でクロージャを見つけるため、2つは同義ではありません。使用済み))。クロージャは、コールスタック用のスパゲッティスタックを使用するか、スタックフレームを終了するときにローカル変数をコピーするか、ヒープにローカル変数を割り当ててガベージコレクションに処理させることで実装できます。
クロージャを作成すると、無名関数は比較的簡単になります(インタープリターを使用すると、非常に簡単になります)。コンパイラを使用すると、関数はコンパイル時にバイトコードに変換され、バイトコード(エントリポイントのアドレスではなく)が実行時に現在の環境に関連付けられます。
関数の合成は無名関数に依存できます。コンパイラが関数合成演算子に遭遇すると、2つの引数とf . gを呼び出す無名関数を作成し、一方の結果をもう一方の引数として渡します。fg
モナドはオブジェクト指向言語で実装できますが、純粋関数型言語ほど必要ではありません。I / Oモナドはそれほど特別なものではなく、基盤となるプラットフォームが副作用を許容するという事実に依存しているだけです。