foldl,foldr
RubyでHaskellの関数を書く・その2.今回はfoldlとfoldrに挑戦.とりもなおさずdupを乱用.だって,Haskellの関数定義が美しいんだもの.
def foldl(n,xs,&b) xss = xs.dup return n if xss.empty? foldl(b.call(n,xs.shift),xs,&b) end def foldr(n,xs,&b) xss = xs.dup return n if xss.empty? b.call(xss.shift,foldr(n,xss,&b)) end
irbで実行っ.
> foldl(64,[4,2,4]){|x,y| x/y} => 2 > foldr(2,[8,12,24,4]){|x,y| x/y} => 8
よしよし,動いてる.それでは,Rubyならではな文字列処理を.
> foldl("a",["b","c","d"]){|x,y| x.concat y} => "abcd" > foldr("a",["b","c","d"]){|x,y| x.concat y} => "bcda"
うん,なんだか変な気分.
よく考えたら,いや,よく考えなくてもなんだけど,HaskellのアルゴリズムのまんまRubyのコードに落としてたって意味ないじゃん(笑)今度からはRubyならではな感じで書かないとな.