[解決済み] C言語で関数型プログラミングを行うためのツールにはどのようなものがありますか?
質問内容
最近、C言語で関数型プログラミングを行うにはどうしたらいいか、よく考えています( ではなく C++). 明らかに、Cは手続き型言語であり、関数型プログラミングをネイティブにサポートしていません。
関数型プログラミングの構造を追加するようなコンパイラや言語の拡張機能はありますか? GCCは以下を提供します。 ネストされた関数 ネストされた関数は親スタックフレームから変数にアクセスできますが、成熟したクロージャにはまだ程遠い状態です。
例えば、C言語で本当に便利だと思うのは、関数ポインタが期待される場所ならどこでも、ラムダ式を渡すことができ、関数ポインタに分解されるクロージャを作成することができることです。 C++0xにはラムダ式が含まれる予定ですが(これは素晴らしいことだと思います)、私はストレートなCに適用できるツールを探しているのです。
[編集] 明らかにするために、私は関数型プログラミングに適した特定の問題をCで解決しようとしているわけではありません。
解決するには?
FFCALL
C 言語でクロージャを構築することができます。
callback = alloc_callback(&function, data)
は、以下のような関数ポインタを返します。
callback(arg1, ...)
を呼び出すことと同じです。
function(data, arg1, ...)
. ただし、ガベージコレクションを手動で処理する必要があります。
関連すること ブロック これらは関数ポインタではありませんが、キャプチャした変数のストレージを手で構築して解放する必要性を避けながら、ラムダを渡すことができます(事実上、いくつかのコピーと参照カウントが行われ、いくつかの構文上の糖と実行時ライブラリの背後に隠されています)。
関連
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
[解決済み] Linux Socket write() によるBad File Descriptor C
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】純粋な関数型プログラミングの効率性
-
[解決済み] ステートレス・プログラミングのメリット?
-
[解決済み] Javascriptは関数型プログラミング言語か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
initializer element is not constant "というエラーが表示されるのですが?
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C言語でのブーリアン値の使用
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する
-
[解決済み] LD_PRELOADのトリックとは何ですか?