けいじゅ@日本ラショナルソフトウェアです.

In [ruby-math :00593 ] the message: "[ruby-math:00593] Re: int / int -
> ? ", on Aug/22 06:14(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>そうですね。私にはまだint/int -> rationalの嬉しさが数学的に
>奇麗っていう以上には良く分かってないんで。ましてや、rational
>を組み込みに、floatをなくすなどという提案まで含むようでは受
>け入れられません。

まず, floatなくすのは、rationalの件とは独立の問題でしょう.

で, int/int -> rational は、数学的に綺麗とか何とかではなく、実用面を強調
しているわけです。

# 数学的に解釈するなら、原さんの説明のように現状でも綺麗に解釈できます。

では、まつもとさんにもわかる言葉で...

というのも、ポリモルフィズムと関係があります。つまり、現行では、数値関連
のクラスの``/''演算子のうちint/int だけが違う振る舞いを持っていて、ポリ
モルフィズムの嬉しさ半減、さらに悪いことには思ってもいない振る舞いをするっ
てことです。

つまり、本来であれば出来るはずのアルゴリズムの再利用性が半減しているわけ
です。典型的な例が、Matrix#detの例でしょう。Matrix#detで使っているアルゴ
リズムは、ある程度普遍的なもの、つまり、数値であれば適応可能なアルゴリズ
ムになっています。ところが、int/int の振る舞いが除算でなくて整除になって
いるので、intが入っているとちゃんと計算できなくなると。正木さんも同様な
例を出してくれましたが、こういったものはいっぱいあるわけです。

我々のようにわかってつくっていれば、それは仕様ですとか言いきったり
(^^;;;、intが現れたときだけ<<特別対応>>したりして、対処できますが、それっ
て何か変だと思いません?

>空正規表現と区別がつかないんで // は導入できませんし、結局現
>時点では他の整合を考えていないアイディアレベルという印象を持っ
>てます。

これは嘘でしょう? 区別できるはずです。演算子//とリテラル//は違ったコンテ
キストで現れますし。区別の仕方は、演算子/と同じようにできるはず。

>整除をdivに、/を int/int->float にして、/ は mathn で
>rationalにするってアイディアそのものはそんなに否定するもので
>はないのですが、

うーん. 何度も言っているようにこれは勘弁してください。

(1/49)*49==1) => false

になるのは勘弁(ref [ruby-math:00561])

>互換性を考えると、むしろ / はそのままにして、
>新しく導入した演算子の方に int/int -> float の役を与える方が
>良いかもと思ってますです。

うーん. これも必要ないんじゃない?


__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---