に自動的にインライン化されていますか?この#postはF#ニュースから、F#が引数として渡された関数をインライン化できることを示しています。 いつもそうですか?それは自動的に起こるか?すべてのlambda引数はF#
3
A
答えて
3
答えはいいえです。次のような関数がある場合、ラムダはインライン化されません。次のコードラムダで はFSharpFunc<,>.InvokeFast()
let fold f s l =
let rec loop acc l =
match l with []->acc |h::t->loop (f acc h) t
loop s l
let list = [1;2;3;4]
list|>fold (fun acc x->x+acc) 0|>printfn "%d"
list|>fold (fun acc x->x*acc) 1|>printfn "%d"
を使用して呼び出されます。しかし、あなたはinline
、状況の変化に応じてfold
機能をマークしている場合。 fold
関数はインライン展開されるだけでなく、ラムダもインライン展開されます。 .NET Reflectorを使用して確認しました。
2
コンパイラが高次関数に対してどのような最適化を行うのか分かりませんが、この記事は明示的にinline
とマークされた型一般化関数を参照しているようです。これはstatically resolved type parametersをサポートするためです。
関連する問題
- 1. F#プログラムのコマンドライン引数?
- 2. `char`引数を取るためのlambda
- 3. lambdaのlambda関数で "this"を取り込む方法は?例</p> <pre><code>class A { void f() {} void g() { [this]() // Lambda capture this { f(); A* p = this; [p]() // Workaround to let inner lambda capture this { p->f(); }; }; } }; </code></pre> <p>については
- 4. F#の引用:変数がスコープ
- 5. 関数へのLambdaメソッドの参照<F,T> NoClassDefFoundErrorをスローする
- 6. JAVA +プリントすべての内線引数
- 7. 関数に渡されるすべての引数(対のみ$オプションの引数)のみのオプションの引数
- 8. f(n)= log(n)^ mはすべての自然数mに対してO(n)
- 9. F#で可変数の引数を取る関数を書くには
- 10. std :: bindはlambdaと比べてまだ便利ですか?
- 11. F#のクラケンプライベートAPIが返すEGeneral:無効な引数
- 12. ProGuardの引数なしのkeepattributesはすべての引数を想定していますか?
- 13. すべての関数引数にアクセスするR
- 14. Sympyとlambda関数
- 15. F#で可変引数を実装する方法
- 16. lambdaはPythonでlambdaを返します
- 17. Emacs Lisp:(function(lambda ...))と(lambda ...)の違いは?
- 18. 関数に定義されているロールはLambdaによって引き継がれません
- 19. SandcastleはF#アセンブリのすべてを出力しません
- 20. Elisp:変数としてのシンボルの値は、let *および(lambda)
- 21. SBT:渡されたすべての引数を取得する
- 22. すべてのTFSビルドを削除するコマンドライン引数?
- 23. コンストラクタが取るすべての引数のリストを取得
- 24. 関数をLambdaに変換
- 25. node.jsのコンストラクタに入る引数の数を調べるには
- 26. OCamlをF#に変換する:OCaml引用符の追加と引用拡張子をF#
- 27. state_machineを使用している場合、どうすればイベント引数にアクセスできますか?if lambda
- 28. コールバック関数のすべての引数を取得する方法
- 29. F#PSeq.iterはすべてのコアを使用していないようです
- 30. F#コンストラクタの関数に名前付き引数を指定する方法はありますか?