コードを読む。
function (fun, p, q) { var m = MochiKit.Base; var self = MochiKit.Iter; var iterables = m.map(self.iter, m.extend(null, arguments, 1)); var map = m.map; var next = self.next; return {repr:function () { return "imap(...)"; }, toString:m.forwardCall("repr"), next:function () { return fun.apply(this, map(next, iterables)); }}; }
なんでlist()じゃなくてextend()なんだろう…と思ったら、スキップしたいからか。
えーっと、引数に対してfuncを適用して、イテレータをつくる?
引数個々をイテレータに変換する。と
こんなかんじか…
js> forEach(imap(function(i, j, k) { return (i * j * k) }, [1, 2, 3], [10,11], [100, 200, 300]), function(i) { print(i) })})
行列の計算みたい。(いろいろ違うけど)
引数で一番短いイテレータの長さにそろうのは、forEachで例外をキャッチしているせいか。