1. ホーム
  2. c

[解決済み] C言語で関数型プログラミングを行うためのツールにはどのようなものがありますか?

2022-03-16 19:49:41

質問内容

最近、C言語で関数型プログラミングを行うにはどうしたらいいか、よく考えています( ではなく C++). 明らかに、Cは手続き型言語であり、関数型プログラミングをネイティブにサポートしていません。

関数型プログラミングの構造を追加するようなコンパイラや言語の拡張機能はありますか? GCCは以下を提供します。 ネストされた関数 ネストされた関数は親スタックフレームから変数にアクセスできますが、成熟したクロージャにはまだ程遠い状態です。

例えば、C言語で本当に便利だと思うのは、関数ポインタが期待される場所ならどこでも、ラムダ式を渡すことができ、関数ポインタに分解されるクロージャを作成することができることです。 C++0xにはラムダ式が含まれる予定ですが(これは素晴らしいことだと思います)、私はストレートなCに適用できるツールを探しているのです。

[編集] 明らかにするために、私は関数型プログラミングに適した特定の問題をCで解決しようとしているわけではありません。

解決するには?

FFCALL C 言語でクロージャを構築することができます。 callback = alloc_callback(&function, data) は、以下のような関数ポインタを返します。 callback(arg1, ...) を呼び出すことと同じです。 function(data, arg1, ...) . ただし、ガベージコレクションを手動で処理する必要があります。

関連すること ブロック これらは関数ポインタではありませんが、キャプチャした変数のストレージを手で構築して解放する必要性を避けながら、ラムダを渡すことができます(事実上、いくつかのコピーと参照カウントが行われ、いくつかの構文上の糖と実行時ライブラリの背後に隠されています)。