私は階層データ構造で何かをしており、以下で説明するように、間接再帰でそれをトラバース/分析するためのメソッドのグループを設計しました。
メソッドa
、b
、c
、およびがありd
、すべてUnit
戻り値の型があります。メソッドa
が最初に呼び出されます。データに応じて、何かを実行してから停止するか、いずれかを呼び出しますb/c/d
。b、c、および d のそれぞれについても同じです。各メソッドは、停止するか、他の 3 つのメソッドのいずれかを呼び出すことができます。そのため、どのメソッドが呼び出され、その実行順序は実行時まで不明であり、メソッド自体を直接呼び出すメソッドはないため、再帰は直接明らかではありません (心配しないでください。すべてのメソッドは、呼び出します)。
a
、b
、c
、またはへの追加の各呼び出しd
は、各メソッドで最後に実行されますが、文字通り各メソッドの最後のステートメントではありません。どちらが呼び出されるかを制御するif
orcase
ステートメントがあります。
どのメソッドも自分自身を直接呼び出していない場合、Scala コンパイラはこの多層呼び出しチェーンを分析し、末尾再帰を実装できますか?