2
consのどのプロパティにより、末尾再帰モジュロconsを排除できますか?
私は、基本的な末尾再帰除去の考え方に精通しています。そこでは、呼び出し自体の直接の結果を返す関数を反復ループとして書き直すことができます。 foo(...): # ... return foo(...) また、特別な場合として、再帰呼び出しがの呼び出しでラップされている場合、関数を書き換えることができることも理解していconsます。 foo(...): # ... return (..., foo(...)) これをcons許可するプロパティは何ですか?cons再帰的な末尾呼び出しを繰り返し書き換える能力を損なうことなく折り返すことができる以外の機能は何ですか? GCC(Clangではない)は、この「末尾再帰モジュロ乗算」の例を最適化できますが、どのメカニズムがこれを発見できるのか、またはどのように変換するのかは不明です。 pow(x, n): if n == 0: return 1 else if n == 1: return x else: return x * pow(x, n-1)