Rubyでポイントフリー続き
さっきとは少し変わってgとf関数はλにしてます。
def g ->x, y { x * y }.curry end def f ->y { y * 4 } end def foo(x, y) f.(g.(x).(y)) end
さて、このfoo(x,y)からxとyを取り除きます。
結果…
def foo ((f.<<).<<.(g)) # f(g(x,y)) end foo.(2).(2) #=> 16
もう何をやっているのか分からないよ・・・。
関数合成のほうもλにしないと自分のRuby力じゃできなかったのでこうしました。
module ComposableFunction # 元コード # def >>(g) # -> *args { g.to_proc.(self.to_proc.(*args)) } # end # # def <<(g) # g.to_proc >> self # end def >> ->g { -> *args { g.to_proc.(self.to_proc.(*args)) } } end def << ->g { g.to_proc.>>.(self) } end end [Proc, Method, Symbol].each do |klass| klass.send(:include, ComposableFunction) end