いけがみです.

僕がわかってないだけなのかもしれませんが,
定数 Zero と Unit を用意する代わりに,
述語 zero? と unit? があれば用事は足りませんか.

どんなときに定数が必要になるのでしょう.
述語で用が足りるのならば,定数を用意する必要はなさそうです.
というのは,僕は(今のところ) Numeric のサブクラスは
今以上に新しく増えないと考えているからです.

Numeric には <=>, [ceil, floor, truncate, round] があるので,
Numeric のサブクラスは,次の 2 つの条件が要請されると僕は思います.
 1) 全順序が具体的に構成できる(評価できる)
 2) 距離空間であり,Z を含んでいる
    (または 距離を保つ Z からの単射準同型が具体的に計算できる)

すると,この条件 1), 2) を満たすような数のクラスは,
直観的には,Z と R しかないんじゃない? という気がしますがどうですか.
特に <=> を定義するのはとても難しいです.

<=> が 
 a < b , b < c ならば a < c を満たしていなければならない .... (*)
なんてどこにも書いてないけど,
Comparable が between? を用意しているので
じつは (*) は必要だと思います.
例えば Zp などの巡回群では (*) が制約になるので
Zp をNumeric のサブクラスとするのに僕は抵抗があります.

原先生は [ruby-list:28934]で
> そのうちNumericファミリーが増えてくると
と書かれていますが,具体的にはどのようなクラスが入るとお考えですか.

一方で Matrix や Polynomial が Z や R に限らず,
任意の可換環を成分ないしは係数に持ちたいという気持ちから,
僕は可換環を示す抽象クラス(ないしはモジュール)が欲しくなります.
計算速度を気にしなければ,成分ないしは係数が任意の可換環の元である
というだけの制約のもとで計算を行う直観的なアルゴリズムがあるからです.

# 先程の mail [ruby-math:00418] はメールの引用のしかたが悪いです.
# どうもすみません.
--
池上 大介
Daisuke IKEGAMI <daisu-ik / is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室