ruby - 需要为 Proc 实现 Haskell 的翻转

标签 ruby haskell functional-programming

Haskell 的 Prelude 有一个有用的函数,可以交换函数的参数:http://zvon.org/other/haskell/Outputprelude/flip_f.html

我需要在 Ruby 中做同样的事情。我不想仅仅定义一个自定义方法,而是想猴子修补 Proc 类,以便我可以将 flipProc#curry 一起使用。有点像

f = lambda {|x, y| [x, y]}
g = f.flip.curry.(2)

y 提供一个值。

我不知道如何重新打开 Proc 类来做到这一点。

最佳答案

class Proc
  def flip
    lambda { |x, y| self.(y, x) }
  end
end


f = lambda { |x, y| [x, y] }
f.flip.(1, 2)
#=> [2, 1]

关于ruby - 需要为 Proc 实现 Haskell 的翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13979814/

相关文章:

ruby - IRB 有哪些替代方案?

haskell - 将函数映射到代数数据类型的字段的更简洁的方法?

csv - Haskell 木薯 (Data.Csv) : Ignore missing columns/fields

haskell - 函数choose k xs的递归定义

ruby 性能 : define method with define_method or eval

ruby-on-rails - rails ,设计 : unknown attribute 'password' for User

ruby - 如何配置 asciidoctor-gradle-plugin 来处理 plantuml?

haskell - 在haskell中给一个字符加一

python - 如何在 Python 3 中使用过滤器、映射和归约

haskell - 如何为 Church 编码的免费 monad 编写解包器?(Haskell)