Clojureのloop-recurを、Rubyでやった。Elixirの古いversionにも有ったらしい。 末尾再帰の最適化 (TCO, tail call optimization) が出来ないsystemだと、助かるみたい。Ruby 2.0.0とかClojureみたいな。 def factorial n cloop n, 1 do |n, acc| if n == 0 acc else recur n - 1, acc * n end end end みたいに使ふ。 instance_evalしか知らなくて、instance_execを見附け出すのに一番時間が掛った。アホだ。 Rubyだと、末尾再帰をloopに変換するmethod実装例とかも、検索すれば見附かるけど。 cf. Rubyで末尾再帰最適化をする。 - athosの日記 http://d.hatena.ne.jp/atho