まつもと ゆきひろです

Dan SugalskiのPerl6の話に触発されてzipメソッドを作ったのです
が、この挙動について自分では決めかねる部分がありました。私自
身はzipが欲しいと思う局面にであったことがないので、そういう
経験のある人から意見を聞きたいと思います。

[1] Enumerable#zipとは


  複数の「列」をまぜるメソッドです。たとえば

    a = [1,2,3,4]
    b = [2,4,6,8]

  とすると

    a.zip(b)

  は

    [[1,2],[2,4],[3,6],[4,8]]

  になります。引数は配列またはto_aryで配列に変換可能でなけれ
  ばなりません。

[2] 決めかねる部分とは


  複数の「列」の長さが異なる場合どうすべきかについてはいくつ
  かの選択肢があります。

    a = [1,2,3,4]
    b = [2,4]

  としたとき

    (a) もっとも長いものに合わせる。現在の実装やPerl6ではこ
        のようになるようです。

        a.zip(b) => [[1,2],[2,4],[3,nil],[4,nil]]

    (b) もっとも短いものに合わせる。Pythonのzipはこちらです。
  
        a.zip(b) => [[1,2],[2,4]]

    (c) レシーバに合わせる。レシーバは位置的に特殊なので意味
        はあるかも。

        a.zip(b) => [[1,2],[2,4],[3,nil],[4,nil]]
        b.zip(a) => [[2,1],[4,2]]

みなさんの意見を聴かせてください。

                                まつもと ゆきひろ /:|)