荻野です。
In message "[ruby-list:19388] Re: オブジェクトの代入について"
on 99/12/10, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:
>逆に + を使う方は全く自然な気がしました。例えば size は(x, y が
>String でも Array でも)
>
> (x + y).size = x.size + y.size
>
>を成り立たせる、つまり見た目準同型になるのできれいじゃない?
うーむ、やっぱりこれは違和感出てきました。sizeって計算機科学的には
普通 log を取りますよね。Rubyでも整数ならbyte数を返しますし。
それをふまえると、
(x * y).size = x.size + y.size
(x + y).size = max(x.size, y.size)
の方が準同形としては自然なんじゃないかと思います。でも
Array だと難しいですね。でも length だと + が保たれた方がいい
ような気がしてしまう。おかしいな。 Integer#length が無いからか。
In message "[ruby-list:19409] Re: オブジェクトの代入について"
on 99/12/11, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:
>うーん、sizeみたいな粗い量を持って来られても…。主観的には
>
> (a * b).reverse == b.reverse * a.reverse
>
>という可換図式(?)の方が構造をあらわしててきれいに感じますね。
>これが今は
>
> (a + b).reverse == b.reverse + a.reverse
>
>なので相当違和感が…
これも言われてみれば確かに。
思いつきで書きますが、結合が + だと ** はたぶんうまい定義がない
から未使用のままでちょっともったいない^_^;です。
同じように結合を * にすると + が未使用ですが、この場合、
無理矢理 + を定義してあげることは不可能ではない。さらにこの場合、
もしうまい + の定義を考えられれば、分配法則:
(a + b)*c = a*c + b*c, a*(b + c) = a*b + a*c
が満たされる可能性がありますね。ちょっと気分いいかも。えーと
'aaaaa' + '11111' = 'bbbbb'
今イチだな..。
--
荻野淳也/(株)デュオシステムズ
Ogino Junya / Duo Systems Co., Ltd.
E-mail:ogino / duo.co.jp
TEL +81-3-3205-0510/FAX +81-3-3205-0590