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

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

>まつもと ゆきひろです

>|まず, floatなくすのは、rationalの件とは独立の問題でしょう.
>じゃあ、[ruby-math:00555]はなに? 冗談?

あまりRuby本体のサイズを大きくしたくないってはなしだったから、そういう手
もあるよって話です。別に、Rational導入したからと言って、Float削る必要は
ないです.

>|というのも、ポリモルフィズムと関係があります。つまり、現行では、数値関連
>|のクラスの``/''演算子のうちint/int だけが違う振る舞いを持っていて、ポリ
>|モルフィズムの嬉しさ半減、さらに悪いことには思ってもいない振る舞いをするっ
>|てことです。
>
>嬉しさが減るってのは分からないでもないです。実装者としてはト
>レードオフが気になるわけで。その嬉しさを実現するために、どれ
>だけのことをする必要があるかということを考えると、あまり簡単
>にはyesとは言えないのです。

それはそうですね. 

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

まつもとさんが観念上の「数」と言っていますが、それです。でも、数という概
念は十分自然なもので、誰でも(小学高学年以上かな)数と言えばある程度のイメー
ジを持っていて、それに期待する振る舞いもそんなに違っていないと思います。

>除算に対して閉じている? だと、整数はもともとそういう数値ではないですよ
>ね。

そうですね. 除算に対して閉じるように構成したのが有理数ですから、だからこ
そint/int->rationalは当然の振る舞いなんですけどね.

>Mathematicaのような言語であれば、観念上の「数」というものが
>あり、たまたま実装上の都合で「整数」、「有理数」、「浮動小数
>点数」になり、シームレスに振る舞う(つまり、コンパチブルなの
>で区別不要)というモデルを提供するべく一所懸命努力するのは当
>然だと思いますが、より「普通の」プログラミング言語(要するにC
>なんだけど)の影響を強く受けたRubyで整数と浮動小数点数(と有理
>数)の間に現状存在しないシームレスな関係を実現するべく、互換
>性を犠牲にしてまで開発コストをかける必要があるかどうかは、正
>直なところかなり疑問です。

ここで言っている、シームレスに振る舞う(つまり、コンパチブルなので区別不
要)と話がありましたが、これは、固定派と非固定派で言うところの、非固定派
の方でしょうね.

ここまでやったほうがよいとはまだ主張はしていません。

>ということは、Floatは鬼子なんですね。というか、現状のInteger
>も十分に鬼子ですね。ということは、私には上記の「数値であれば」
>も幻想に思えるのですが。そういう「数学的に正しくシームレスな
>数値」はRubyのNumericとは独立に定義した方が良いんじゃないで
>すかねえ。

うーん. そういう道もあると思いますが、一般のユーザがIntegerを扱うときに、
期待するのはちゃんとした四則演算が成り立つ世界だと思いますが? 

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