今日の自作関数
今日の自作関数は,趣向を換えてRubyでzipWith関数でも書いてみる.パフォーマンスなんぞ期待しない.
なんていうか,やっぱ長くなるよね.
def zipWith(x,y,&b) xs = x.dup ys = y.dup z = [] aux = lambda{ |z,x,y| if (not x.empty?) && (not y.empty?) xh = x.shift yh = y.shift z.push(b.call(xh,yh)) aux.call(z,x,y) end } aux.call(z,xs,ys) z end
ちょっとでも使い易いように,zipWith関数にはリストを2つ,そんでブロックを与えるようにした.二引数関数のhogeを渡す,とかRubyでできないものね.この辺が関数型言語との違いか.んで,補助関数としてauxなんてのも作ったりして.
実際にirbで実行してみる.
irb(main):001:0> require 'zipwith.rb' => true irb(main):002:0> a = [1,2,3,4,5] => [1, 2, 3, 4, 5] irb(main):003:0> b = [3,4,5,6,7] => [3, 4, 5, 6, 7] irb(main):004:0> zipWith(a,b){|x,y| x + y} => [4, 6, 8, 10, 12]
よし,動いた.
余談だけど,irbを終了する時に,ついつい,うっかり:qとタイプしてしまいます.