すっごい前の記事だけど。
http://anond.hatelabo.jp/20071110221822:title
ruby だとこんな感じじゃないでしょうか。
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)