Bruce.です。
わたしも inject の動作が頭にすっと入ってくるようになるまではかなり苦労しました。
でまあちょっと脱線。
畳み込み関数の比較 (fold / accumulate / inject / reduce) - blanket log
http://d.hatena.ne.jp/blanketsky/20071129/1196329379
つーか、fold の弱点として、言語によって引数の順番がまちまちで、
正直憶えきれないってのがあるんだよな。誰か対応表とか作ってくれんもんか。
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20070519#p01
確かにいろいろとややこしいのでまとめてみました。
いくつかの言語について大雑把に表にすると次のような感じ。
言語 関数
Haskell, OCaml, Scheme, Erlang foldl* f init items
C++ accumulate(begin, end, init, f)
Ruby*, JavaScript items.inject(init, f)
Python, Perl* reduce(f, items [, init])
この表にはありませんが、たしか Smalltalkにも inject があって、Rubyのそれはここから
もらったのだという話をどこかで聞いたことがあるような気がしますが、真偽のほどはわかりません
#と書いておけばまつもとさんが何か書いてくれるだろう
#そしてまつもとさんといえば。例の本なんかもう売ってたので買いました。
#機会がありましたらぜひ著者サインをいただきたく :)
--
木村浩一/KIMURA Koichi
I thought what I'd do was, I'd pretend I was one of those deaf-mutes
or shoud I?
mail kbk at kt.rim.or.jp
web www.kt.rim.or.jp/~kbk/zakkicho/index.html