ブックマーク / tociyuki.hatenablog.jp (1)

  • トランポリン版の継続渡し leaf_count_cps_t - Tociyuki::Diary

    11月16日に goto を使った強引なやりかたで、末尾再帰のループ化と継続渡しの実行をやってみたところ、コメント欄で shiro さんにトランポリンを紹介してもらいました。 ⇒ http://d.hatena.ne.jp/tociyuki/20061116/1163674424#c1163895106 shiro 『なお、ベース言語が末尾呼出し最適化を保証してくれない場合によく使う手としてトランポリンがあります。各関数を、結果を返すのではなく、その関数の継続手続きを返すように書いておきます。そして、(途中略)ひたすら返って来た継続を呼び出しつづけるドライバを書いて駆動します。 これだとベース言語のスタックを消費しません。』 随分と、あれから経った気がしますが、突然、これをやってみたくなったので試してみました。 まずは、関数コールをおこなわせるコードリファレンスをドライバに渡して、こんな風

    トランポリン版の継続渡し leaf_count_cps_t - Tociyuki::Diary
  • 1