`
yangdong
  • 浏览: 66414 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

模拟实现一个 Ruby 的 TCO

阅读更多
今天搜了一下,发现 ruby 只有一部分 VM 实现支持 TCO(Tail Call Optimization)。下面的代码模拟实现了一下,有点 clojure 的感觉了~~
class Recur
  attr :args
  def initialize(*args)
    @args = args
  end
end

def 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, max
end

# 设到 "0"*99999 我的机器就内存不够了
p fib ("1" + "0"*100).to_i
分享到:
评论

相关推荐

    Ruby 中模拟退火算法的实现_Ruby _代码_下载

    第一个是纯 Ruby 中模拟退火随机搜索过程的一个很好的通用实现。如果您将事物格式化为模拟退火问题,那么文件模拟退火.rb 应该在许多问题域中都很有用。第二个是针对特定问题域的模拟退火的具体实现:安排锦标赛。在...

    Ruby-一个Ruby的例子

    在这个"Ruby-一个Ruby的例子"中,我们将探讨Ruby的基础知识,以及如何通过具体的代码示例来理解其核心特性。 首先,Ruby的面向对象特性是其核心之一。在Ruby中,一切都是对象,包括基本数据类型如数字、字符串和...

    Ruby-TensorStream用Ruby重新实现TensorFlow

    Ruby-TensorStream是一个开源项目,旨在为Ruby开发者提供一个类似于Google TensorFlow的深度学习框架。它的核心目标是让Ruby程序员能够利用TensorFlow的强大功能,同时保持Ruby语言的优雅和简洁。这个项目在设计时...

    Ruby-JRuby一个Ruby语言的Java实现

    这就是JRuby的出现原因,它是一个将Ruby语言实现于Java虚拟机(JVM)上的项目。 JRuby的核心目标是提供与原生Ruby解释器相当的性能,同时利用JVM的跨平台兼容性和企业级特性,如垃圾回收、线程支持和丰富的库。通过...

    Ruby-Mittsu一个Ruby的3D图形库

    Ruby-Mittsu是一个专为Ruby编程语言设计的3D图形库,它允许开发者在Web浏览器中创建复杂的3D场景和应用。Mittsu的核心是基于JavaScript的THREE.js库,这是一个广泛使用的开源库,用于在Web上进行3D图形渲染。通过将...

    如何利用Ruby简单模拟Lambda演算详解

    文章首先从一个简单的Ruby代码示例引入,展示了Ruby中函数的特性,然后逐步探讨Lambda演算的核心概念。 标签中的“ruby”,“lambda”,“lambda演算”,“ruby proc”,“lambda”都与文章主题紧密相关。Ruby Proc...

    Ruby-LightIO是一个ruby网络库它结合了rubyfiber和快速IOeventloop

    Ruby-LightIO是一个针对Ruby开发者的网络库,其核心特性在于将Ruby的Fiber和高效的IO事件循环(event loop)相结合。这个库的设计目标是为了提供更高效、更轻量级的网络服务处理能力,尤其适合于构建高并发、低延迟...

    Ruby-Puma一个Ruby的并发Web服务器

    Ruby-Puma是一个高性能、轻量级且并发的Web服务器,专为Ruby编程语言设计。它在Ruby社区中广泛用于构建Web应用程序,特别是与Rails框架一起使用。Puma的设计目标是提供稳定、快速和易于管理的服务,同时保持低内存...

    Ruby-Raven是Sentry的一个Ruby客户端

    Ruby-Raven是面向Ruby开发者的错误处理工具,它是Sentry服务的一个官方客户端。Sentry是一个开源的、自我托管的日志和错误管理平台,用于实时监控和追踪应用中的异常情况,帮助开发者快速定位并修复问题。Raven库为...

    Ruby-Whois一个智能纯Ruby实现的WHOIS客户端与解析器

    Ruby-Whois是一个高效、灵活且完全用Ruby语言编写的WHOIS客户端和解析库。它设计用于查询域名、IP地址和其他WHOIS相关的记录,并能够处理各种服务器响应格式。这个库的强大之处在于它不仅可以发送WHOIS请求,还可以...

    Ruby-Squid一个Ruby库用于在PDF文件中绘制图表

    Ruby-Squid是一个专门针对Ruby开发者设计的库,它的主要功能是在PDF文件中绘制各种复杂的图表,从而为报告、分析或者其他需要图形展示的场景提供强大的支持。Ruby-Squid库利用了PDF处理的能力,使开发者能够轻松地...

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    `ruby-install`就是这样一个工具,它允许用户方便地安装和管理这些不同的Ruby实现。 `ruby-install`是一个开源的命令行工具,主要功能是下载、编译并安装Ruby、JRuby、Rubinius、MagLev或MRuby等不同版本的Ruby解释...

    Ruby自动化脚本实现网络拓扑映射

    标题、描述及标签均指向了“Ruby自动化脚本实现网络拓扑映射”这一主题,然而,实际的部分内容却似乎与自动化脚本或网络拓扑映射没有直接关联,而更像是一个自动化操作的脚本示例,可能用于模拟鼠标移动和键盘输入,...

    Ruby-twittercldrrbICU的Ruby实现

    总的来说,Ruby-twittercldrrb是一个强大的工具,它使得Ruby开发者能够在他们的项目中充分利用ICU的功能,以实现更高级别的国际化和本地化。通过理解和熟练使用这个库,开发者可以提高其应用的可访问性和可用性,为...

    飞机大战ruby实现

    【标题】"飞机大战ruby实现" 是一个使用Ruby编程语言开发的飞行射击游戏,它基于RPG Maker XP 1.03引擎构建。这个项目展示了如何利用Ruby的灵活性和RPG Maker XP的功能来创建一款简单但有趣的游戏。 【描述】中的...

    Ruby-Savon是一个Ruby编程语言的SOAP客户端

    Ruby-Savon是Ruby编程语言中的一个强大的SOAP(Simple Object Access Protocol)客户端库,它使得在Ruby中与SOAP服务交互变得简单而高效。SOAP是一种基于XML的协议,用于在不同系统之间交换结构化和类型化的数据,常...

    Ruby-RubyJMeter一个基于Ruby的DSL用于构建JMeter测试计划

    Ruby-JMeter是一个强大的工具,它将Ruby编程语言与Apache JMeter测试框架相结合,为性能测试和负载测试提供了灵活且易于使用的领域特定语言(DSL)。这个工具使得测试人员和开发者能够用Ruby编写JMeter测试计划,...

    Ruby-orderquery在一个查询中查找上一个下一个ActiveRecords

    `order_query`是一个小巧但强大的工具,它增强了ActiveRecord的功能,使得在Ruby on Rails应用中处理记录顺序关系变得更加简单。它体现了Ruby社区对简洁、可读性代码的追求,以及在处理常见问题时的创新精神。在你的...

    resume 用Ruby技术实现的search 分页的例子

    这里,`search`方法接受一个`query`参数,然后在`name`字段上执行一个SQL的LIKE操作,匹配包含`query`的用户记录。 接着,我们引入分页。Rails提供了`will_paginate`或`kaminari`这样的插件来简化分页实现。以`will...

    Ruby-DuckRails一个开发工具快速和动态模拟API端点

    Ruby-DuckRails是一个高效且灵活的开发工具,专为帮助开发者快速模拟API端点而设计。这个工具在Ruby社区中得到了广泛的应用,尤其是在进行API驱动的开发或者集成测试时,能够极大地提升工作效率。 **一、鸭子原则与...

Global site tag (gtag.js) - Google Analytics