Rubyで末尾再帰最適化をする。Daysこの広告は、90日以上更新していないブログに表示しています。2011-01-19Rubyで末尾再帰最適化をする。ruby元ネタはPythonで末尾再帰最適化をする。wasabizの日記。Pythonのデコレータを使って、末尾再帰で書かれた関数に対して末尾呼び出し最適化(TCO)を行う、というものです(どうやってTCOを実現しているかの詳細についての説明はここでは割愛します)。元エントリでは「Pythonがすごいからこんなことができるんだ」という感じで書かれていますが、タネさえ分かればいろんな言語でできそうだということが分かったので、他の言語でも試してみることにしました。はじめに、試しにScheme版を書いてみたものの、そもそもSchemeはTCOを勝手にやってくれるのであまり意味のない例になってしまいました。その後、Scheme版をだいたいそのままRubyに書き直したのが以下のRuby版です。いうクラスマクロを以下のように使います。すると、以下のように、sum1メソッドでスタックオーバーフローになるようなケースでも、sum2メソッドではスタックオーバーフローになりません。TCOがうまく効いているようです。5000050000実装としては、メソッドの呼び出しを置き換えるのに、Pythonのデコレータの代わりにアラウンドエイリアスを使ってます。アラウンドエイリアスの他にもメタプログラミングRubyで紹介されているテクニックをいくつか使わせてもらいました。9...2013-08-05Clojureコンパイラの型推論器をとりだしてみるclojure.orgには,Clojureについて次のような説明がある。4はてなブログをはじめよう!athosさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。