Ruby 需要实施Haskell';让我们翻转一下程序
Haskell的前奏曲有一个有用的函数,可以交换函数的参数: 我需要用Ruby做同样的事情。不只是定义自定义方法,我想对Ruby 需要实施Haskell';让我们翻转一下程序,ruby,haskell,functional-programming,Ruby,Haskell,Functional Programming,Haskell的前奏曲有一个有用的函数,可以交换函数的参数: 我需要用Ruby做同样的事情。不只是定义自定义方法,我想对Proc类进行猴子补丁,这样我就可以在Proc#curry旁边使用flip。差不多 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
Proc
类进行猴子补丁,这样我就可以在Proc#curry
旁边使用flip
。差不多
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]
更新:
# intermediate transformations
plus.flip.curry['a']
lambda {|a, b, c| a + b + c }
# flip
lambda {|c, b, a| a + b + c }
# curry 'a', still a Proc because of currying
lambda {|b, c| 'a' + b + c }
我对咖喱这一点感到困惑,不是吗?您可以尝试翻转proc的参数,不管您是否想在之后使用它。这是正确的。咖喱和翻转是独立的。谢谢。我在想有这样的东西。不幸的是,这不适用于程序curry和部分应用程序。我认为现在应该可以了,我用一个curry和翻转的程序更新了示例。
plus.flip.curry['a']
返回部分应用的程序,该程序包含两个参数。试试plus.flip.curry['a']['b','c']
,这会产生abc
。我更新了示例以显示实际步骤。谢谢!我没有注意到flip定义中对curry的调用。还有一个问题:f=lambda{x,y{x,y]}g=f.flip.(1)pg.(2)#=>[1,2]我期望[2,1]。我不明白为什么。
# intermediate transformations
plus.flip.curry['a']
lambda {|a, b, c| a + b + c }
# flip
lambda {|c, b, a| a + b + c }
# curry 'a', still a Proc because of currying
lambda {|b, c| 'a' + b + c }