ないブログに表示されています。新しい記事を書く事で広告が消えます。】CATEGORY[]プログラム中の末尾再帰に関するメモ「萌香」のコードを整理しようと思ってコードを読んだんですが、「末尾再起の最適化に関するメモ」というコメントがなにを書いてるんだかさっぱりわからない。ポルナレフAAを貼りたくなるぐらい何がなんだかわからない。なんか悪い薬でもやってたんだろうか。末尾再帰っぽいことがようやくできて舞い上がっていたんだろう。黒歴史として早く葬りたい。---末尾再帰の最適化に関するメモ本プログラムには変数のフレームのスタックと継続のスタックが存在します。scopeのクロージャなので、クロージャの再帰呼出しではフレームのスタックが積まれることはありません。(その呼出しへの参照が残っていた場合、そこに保持されている。フレームの復帰となります。scopeクロージャの場合フレームの新規作製であり、作製されたフレームはクロージャの実行の終了とともにGCによって回収されるようになります。結局クロージャの実行時にフレームの復帰の継続がどんどん増えていくことになります。末尾再帰の場合、フレームの復帰の継続を作製する場合、次の継続にフレームの復帰があった場合継続の作製は行う必要はありません。以上のことから、フレーム復帰の継続の作製を抑制すれば末尾再帰の最適化になることになります。本プログラムには変数のフレームのスタックと継続のスタックが存在します。valueの戻し先)等様々なものがある。(わかりにくくてすみません。厳密な「継続のスタック」ではないかも知れない。scopeのクロージャなので、クロージャの再帰呼出しではフレームのスタックが積まれることはありません。「クロージャの再帰呼び出し」ではなく「クロージャの呼び出し」。ちなみに現在の実装ではフレームを積んでおきながら、呼び出しと同時にクロージャ定義時のフレームの参照に変更している。(その呼出しへの参照が残っていた場合、そこに保持されている。)「その」と「そこ」が何を指しているかわからない。フレームの復帰となります。scopeクロージャの場合フレームの新規作製であり、作製されたフレームはクロージャの実行の終了とともにGCによって回収されるようになります。ここでいう「フレームの退避」はフレームチェインに新しいフレームを作成すること。なんで「退避」と言う言葉を使ったのかわからない。今考えると「フレームの退避」「フレームの復帰」は必要ないっぽい。結局クロージャの実行時にフレームの復帰の継続がどんどん増えていくことになります。フレームの復帰は最後のものだけ行えばよく、末尾再帰の場合、フレームの復帰の継続を作製する場合、次の継続にフレームの復帰があった場合継続の作製は行う必要はありません。以上のことから、フレーム復帰の継続の作製を抑制すれば末尾再帰の最適化になることになります。現在の実装ではフレームの復帰が連続する場合その継続の作成を抑制しているがフレームの復帰は必要ないっぽい。)最古記事Blog作りました(12/25)朝日新聞の字体?の変更(01/10)プログラム中の末尾再帰に関するメモ(01/17)「Rubyで習作」の添削達(02/14)Mewでのsmtp認証(04/17)アクセス。