From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2005-12-02T04:25:03+09:00 Subject: [ruby-dev:27928] Re: Numeric と Complex けいじゅ@いしつかです. In [ruby-dev:27925] the message: "[ruby-dev:27925] Re: Numeric と Complex", on Dec/02 03:29(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|>で、Real >|>については、コンピュータ言語ではRealは伝統的に浮動小数点を表 >|>現する単語として用いられてきたので整数のスーパークラスの名前 >|>にはふさわしくないというだけのことです。それを「キモい」と表 >|>現するなら、それ以外の理由はありませんが「名前重要」ですから。 >| >|名前が気に喰わない、というだけで案としては反対ではないのですか? > >そうです。[ruby-dev:27871]にも述べたように有力な案のひとつと >して考えています。でも、Realはやめてってこと。 わたしとしては, 純粋に数学的な: Numeric > Complex Complex > Real Comparable > Real Real > Integer Real > Float # 私に言わせれば: # Numeric > QuasiNumber # QuasiNumber > Float # ですが, それはよいとして... も魅力的ではありますが, 現実的な構造と現実に使う頻度を考えると無駄です よね. それに, 数学の世界と違ってRubyの世界には抽象クラスというものがあ りますので... Complexとかは, 使用頻度, 構造を考えても例外的なものですので, Complexを Numericの直系にする必要はないと思います. そうすると, 必然的にそれを区 別するRealみたいなものも必要ないんではないかと思います. すると, 現行と同じ: Numeric > Integer Numeric > Float となるわけですが, Complex はどうするかというと, やはり Numeric > Complex でよいのではないかと思います. 結局, 現行のモデルと同じわけですが, Numeric > Integer Numeric > Float Numeric > Complex 別に論理的(数学的)に矛盾しているわけではないです. 仮想的に以下のように 考えればよくわかるかと思います. Numeric > (GenericNumber) > (RealicNumber) > Integer Numeric > (GenericNumber) > (RealicNumber) > Float Numeric > (GenericNumber) > Complex とはいえ, あまり存在意義のないクラスをわざわざ用意する必要はないとおも います. では, どう区別したらよいかというと: Numeric#realic? の様なメソッドを用意してそれで区別すればよいのではないかと思いますが? これが[ruby-dev:27925]の回答にもなっていますかね: > Complexを最初に作ったときに、私と石塚さんで「Rubyの数はかく > あるべし」という話をしとかなかったってことがまずかったですね。 > あの時点で私がよく考えてたら「リニアな数」でないComplexを > Numericのサブクラスにする時点で、リニアな数をまとめる「なに > か」を導入する必要性に気がついていたと思います。 理想的には必要だけども, 松本さん曰く「リニアな数」でない数は例外的(使 用頻度として)ので, 例外的に扱えばよいと考えて今のような形になっていま すです. PS. いま遠いところにいっていますので, replyは不可かも... __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---