テール再帰のほかにテールコールの最適化は可能ですか?私は、再帰を伴わないが、成功していないものを見つけようと試みてきた。出来ますか?どんな例?テール再帰のほかにテールコールの最適化?
答えて
確かに「テールコール最適化」は、この種の最適化のための最も一般的な、再帰的に不可知な形式の用語です。この最適化は、再帰を、while
ループまたはそれに類するものと同等のものに置き換えません。代わりに、テールコールは、呼び出し元のスタックフレームが再利用されるように変換されます。 の形式のコードreturn f(...)
またはf(...); return
はこれに修正可能です。コンパイラが何が呼び出されているかをコンパイラが知ることができないファンクションポインタ/クロージャ/仮想メソッドの場合でも、のいずれかの場合はf
で動作します。したがって、別のコンパイル、高次関数、レイトバインドなどでもうまく機能します。
十分なコードを見れば、それは機能的にも必須でもありません。一般的なケースは、呼び出し元が主タスクの呼び出し先に委任し、いくつかの追加の準備だけです。関数コードでは、たった一つだけしかなく、他の小さな関数の観点から実装されている小さな関数がたくさんあるので、単純な変換を引数に適用したいくつかの層で終わります。次の層(変換されたデータを引数として) TCOは2番目のステップを最適化します(理想的には)単純なjump
のような安価な呼び出しを行い、モノリシックな実装よりもスタックスペースを少なくして素敵なモジュラーコードにします。
SomeClass doSomething(Argument a) {
log.debug("Doing something");
return this.somethingDoer.doIt(a, this.someExtraData);
}
技術的に相互に再帰的だが、通常は数十人との任意の機能の非常に少数のアクティベーションを(持っているもう一つの例:あなたが他のオブジェクトのオブジェクトを構成し、そのデリゲート便利なメソッドを公開することがあり、オブジェクト指向設計ではまたはその間の他のアクティベーション数百)、状態ごとの機能を有し、その状態に入るようにそれを呼び出すことによって実装された状態機械である:
void stateA() {
// do actual work
// determine which transition applies
stateB();
}
void stateB() {
// do actual work
// determine which transition applies
state...();
}
// dozens, possibly hundreds of other states
- 1. 再帰関数の部分的なテールコールの最適化はありますか?
- 2. Mathematicaのテールコールの最適化?
- 3. ES6クラスの再帰メソッドはTCO(テールコール最適化)を利用しますか?
- 4. テールコール再帰的に最適化された式をビルドできますか?
- 5. テールコールの最適化javascript
- 6. CとHaskellでの相互再帰でのテールコール最適化のコンパイル
- 7. NodeJSのテール再帰
- 8. 再帰関数の最適化
- 9. 再帰SQLクエリの最適化
- 10. 再帰的プログラムの最適化
- 11. テールコール最適化とRAII共存可能?
- 12. Scalaでのテール再帰
- 13. gcc/g ++のテール再帰
- 14. テール再帰のないクイックソート
- 15. BinaryTreeのテール再帰関数
- 16. オブジェクトによるテール再帰
- 17. 再帰、テール再帰と反復
- 18. Lua - テールコール再帰へのコルーチンの再帰の書き換え
- 19. プロローグツリーを平坦化するためのテールコールの最適化
- 20. 再帰関数を最適化する
- 21. Pharoはテールコールの最適化を提供していますか?
- 22. GCC/Clangでテールコールの最適化を強制できますか?
- 23. JavaScriptテールコールの関数は最適化されていますか?
- 24. チャペルはテールコールの最適化を実装していますか?
- 25. MATLABはテールコールの最適化を実行しますか?
- 26. Fregeはテールコールの最適化を実行しますか?
- 27. array_walk_recursiveはテールコールの最適化を使用しますか?
- 28. テール再帰(継続あり)
- 29. テール再帰的Ocamlプログラム
- 30. テール再帰(@tailrec)再帰関数対非再帰関数スカラースタックオーバーフローエラー?
[継続は(http://en.wikipedia.org/wiki/Continuation -passing_style "ウィキペディアの記事「Continuation-passing style」)は、テールコールの最適化の対象となる可能性があります。 – stakx