2008-02-09

なんとなく目についたから

すっごい前の記事だけど。

http://anond.hatelabo.jp/20071110221822:title

はじめはRubyで書こうと思ったけど挫折した。だれかRubyで書いてくれないかな・・・。

ruby だとこんな感じじゃないでしょうか。

# 問3だけ。pythonコードコピペ

関数オブジェクトなのに引数にできないの?なんで?

ruby には関数はないです(多分)。全部メソッド。で、関数に見えるのはトップレベルにある Kernel オブジェクトのメソッド。メソッドを変数にして実行したいなら、method オブジェクトを作るか、send メソッドを使ってメッセージパッシングすればいい。でも普通 proc を使うと思う。

def foldr(callee, lst, obj)
    if lst.empty?
        obj
    else
        callee.call(lst[0], foldr(callee, lst[1..-1], obj))
    end
end

def apply(callee, obj)
    callee.call(obj)
end

def plus5(num)
    num + 5
end

def times10(num)
    num * 10
end

def divide2(num)
    num / 2
end

foldr(method(:apply), [:plus5, :times10, :divide2].map{|m| method(m)}.reverse, 10)
foldr(method(:apply), ([:plus5, :times10].map{|m| method(m)} + [lambda {|num| num / 2}]).reverse, 10)

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん