Tag: clojure

Ruby中的懒惰斐波那契

我可以在Clojure中写一个懒惰的斐波那契,如下所示: (def fib (lazy-cat [1 1] (map +’ fib (rest fib)))) 我正在尝试(不成功)在Ruby中编写它,如下所示: fib = Enumerator.new do |yielder| yielder << 1 << 1 fib.zip(fib.drop(1)).map do |a,b| yielder << (a + b) end end 在简化的情况下,这适用: fib = Enumerator.new do |yielder| yielder << 1 << 1 puts "here" end puts fib.take(2).inspect puts fib.drop(1).take(1).inspect 但这不是: fib = Enumerator.new do […]

如何在函数式编程语言中实现Rails类型webapp中的“模型”?

在MVC Web开发框架(如Ruby on Rails,Django和CakePHP)中,HTTP请求被路由到控制器,控制器获取通常持久存储到后端数据库存储的对象。 这些对象代表用户,博客post等内容,并且通常在其方法中包含用于权限,获取和/或变异其他对象,validation等的逻辑。 这些框架都非常面向对象。 我最近一直在阅读关于函数式编程的文章,它似乎带来了诸如可测试性,简洁性,模块性等巨大的好处。然而,我见过的函数式编程的大多数例子都实现了诸如quicksort或fibonnacci序列之类的琐碎function,而不是复杂的webapps。 我看了几个“function”的Web框架,他们似乎都很好地实现了视图和控制器,但很大程度上跳过了整个“模型”和“持久性”部分。 (我正在谈论更多像Compojure这样的框架,这些框架应该是纯粹的function,而不是一些方便似乎使用Scala的OO部分用于模型的东西 – 但如果我在这里错了,请纠正我。) 我还没有看到如何使用函数式编程来提供OO编程提供的隐喻,即表映射到对象,以及对象可以提供强大的封装逻辑(如权限和validation)的方法。 此外,使用SQL查询来保存数据的整个概念似乎违反了整个“副作用”概念。 有人可以解释如何在function编程的Web框架中实现“模型”层吗?

为Clojure应用程序启动工头的问题

我试图按照指南在Heroku上获得一个Clojure应用程序。 一切正常,除了在本地运行。 我正在使用Windows 7。 这一步说: gem安装工头 工头开始 在1我必须是管理员,但安装顺利 当我执行2时,我得到: C:/Program Files (x86)/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’: no such file to load — pty (LoadError) from C:/Program Files (x86)/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’ from C:/Program Files (x86)/Ruby192/lib/ruby/gems/1.9.1/gems/foreman-0.19.0/lib/foreman/engine.rb:4:in `’ from C:/Program Files (x86)/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’ from C:/Program Files (x86)/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’ from C:/Program Files (x86)/Ruby192/lib/ruby/gems/1.9.1/gems/foreman-0.19.0/lib/foreman/cli.rb:2:in `’ from C:/Program Files (x86)/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’ from C:/Program Files (x86)/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in […]

从静态打字到动态打字

我一直致力于静态类型语言(C / C ++,Java)。 我一直在玩Clojure,我真的很喜欢它。 我担心的一件事是:假设我有一个窗口,需要3个模块作为参数,并且需求发生变化,我需要将另一个模块传递给函数。 我只是更改了函数,编译器在我使用它的任何地方都会抱怨。 但是在Clojure中,在调用函数之前不会抱怨。 我可以做一个正则表达式搜索和替换,但似乎有机会错过一个调用,它将被忽视,直到该函数实际被调用。 你们怎么处理这个?

Ruby是否有任何类似于Clojure的pmap的构造用于并行处理?

我正在尝试决定是在Ruby还是Clojure中实现一个应用程序。 其中两项要求涉及并行处理: 该应用必须进行并行调用才能通过互联网获取XML Feed和其他类型的数据。 进行了许多这样的调用,并且序列化调用效率低下。 理想情况下,对这些呼叫的响应应该并行处理。 处理主要是指将原始XML转换为更小的结构化数据(Ruby散列或Clojure映射)并将其插入MySQL数据库或CouchDB数据库。 我知道Ruby比Clojure好很多,但如果这是Clojure的正确项目,我就是全部使用它。 Clojure的pmap函数似乎是这两个要求的理想选择。 我想知道一些Ruby库或function是否有类似干净和简单的方法来执行上述并行处理任务。