ごとけんです

In message "[ruby-list:19380] Re: オブジェクトの代入について"
    on 99/12/10, Akinori MUSHA aka knu <knu / idaemons.org> writes:
> ただ、そうすると今度はArrayクラスはどうなんだということになります。
>ary + aryは可換ではないですが、ary * aryとするとまるでベクタ同士の
>積のように見え、直感に反するような気がします。

これは数値計算的になかなか説得力あります。ちなみにこの問題は
すでに近所で一般的に議論され結果としてこういうの作ってます。

Array#compose

  [a,b,c,...].compose{|i,j,k,...| ....}

    多次元配列a,b,c,...を要素とするArrayに機能する。各配列の要
    素をブロック変数とし、演算を施した結果の多次元配列を返す。

    [a,b].compose{|i,j| i*j if i > 0}

    は以下とほぼ等価である。

    c = []
    a.each_indeces{|i| c[i] = a[i] * b[i] if a[i] > 0}
    a = c

この応用として、

  def multiply(other)
    [self,other].compose{|i,j| i*j}
  end

  alias x multiply

というようなものも作りました。ary1. x ary2 ってかんじです。

> さらにコンピュータ言語の場合、書かれたコードを素直に「読めるか」と
>いうのがとても重要ですが、 "abc" * "def" も [1,2,3] * [4,5,6] も
>ちょっと読みづらいです。'*' に連結のニュアンスを見いだせません。
># 慣れの問題だろうけど

逆に一般の配列同士の * にはいかなるニュアンスも見出せないの
で、強く印象づけられるという側面もあるかなっと ^^;;

-- gotoken