irb(main):001:0> cube = proc{|x| x ** 3} => # irb(main):002:0> croot = proc{|x| x ** (1.quo 3)} => # irb(main):003:0> compose = proc {|f,g| proc {|x| f[g[x]]}} => # irb(main):004:0> funclist = [Math.method(:sin), Math.method(:cos), cube] => [#, #, #] irb(main):005:0> invlist = [Math.method(:asin), Math.method(:acos), croot] => [#, #, #] irb(main):006:0> funclist.zip(invlist).map {|f, invf| compose[invf, f][0.5]} => [0.5, 0.4999999999999999, 0.5]