原です。

>まつもと ゆきひろです

>なんとなく、Array#transposeを作ってCVSに突っ込んでみました。
>現状では要素数があわないとIndexErrorを出します。IndexErrorで
>良いかっていうと疑問が残るんですが。

おお!

transpose って名前は長いですね。由緒正しいんだけど。

>each_withは良いかも。

each_with はいいですね。

>とはいうものの、現状ではEnumerable#zipを
>
>  * レシーバの長さに合わせる(足りなければnil、余れば無視)
>  * ブロックが与えられたらsync_each(each_with)的動作をする
>
>ようにしてみました。

すばらしい。とうとう、ベクトル a と b の内積を

  a.zip(b).inject(0){|s, (x, y)| s + x * y}

と一行で書けるようになったわけだ。

ところで、zip と zip{} の関係は to_a と each{} の関係になるわけで
誤解を招かないかな。zip と zip{} の関係を to_a と map{} の関係だと
思って、(0..1).zip([10, 11]){|x, y| x + y} #=> [10, 12] を期待しな
いかな。