首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

模拟兑现一个 Ruby 的 TCO

2012-11-01 
模拟实现一个 Ruby 的 TCO今天搜了一下,发现 ruby 只有一部分 VM 实现支持 TCO(Tail Call Optimization)。

模拟实现一个 Ruby 的 TCO
今天搜了一下,发现 ruby 只有一部分 VM 实现支持 TCO(Tail Call Optimization)。下面的代码模拟实现了一下,有点 clojure 的感觉了~~

class Recur  attr :args  def initialize(*args)    @args = args  endenddef def_recur(fn_name, &block)  def recur(*args)    Recur.new *args  end  mtd = lambda do |*args|    loop do      ret = block.call *args      return ret if not ret.instance_of? Recur      args = ret.args    end  end  self.class.send(:define_method, fn_name.to_sym, mtd)end# Fibonacci 数列def fib(max)  def_recur :_fib do |ret, a, b, max|    return ret if a > max    ret << a    recur ret, b, a+b, max  end  _fib [], 0, 1, maxend# 设到 "0"*99999 我的机器就内存不够了p fib ("1" + "0"*100).to_i

热点排行