Feature #5513
closedNumeric へ述語語の追加
Description
現在の Numeric では、その表現の特徴について問合せる基本的な語が不足して
おり、プログラミングにおいて総称性の確保が難しくなっています。いくつか
の述語を追加することで、未知への数値表現への備えが出来、協調して働く基
盤が整うと思われます。
具体的には以下の述語を追加する事を提案します。
Numeric#rational?、Numeric#complex?、Numeric#float?
Numeric#exact?、Numeric#inexact?
Numeric#finite?、Numeric#infinite?、Numeric#nan?
Numeric#positive?、Numeric#negative?
Ruby においては、クラス階層はほぼ実装の為の便宜的なものですが、実際には
プログラミングにおいて、それがどのクラスであるのかを手掛りにしている事
も多いです。しかし、それは正しいやり方になりません。例外的に、
Numeric#real? と Numeric#integer? は既に用意されています。
Ruby では、Scheme におけるような厳密数と非厳密数の区別がありません。こ
のため総称性の確保が困難になっています。その為、現在の Complex の実装な
ども真っ当なやり方とは言えない部分があります。
Ruby には既に Float#finite? などがありますが、実際には、BigDecimal を見
ればわかるように、これは Numeric にあるべきものだったと思います。
Numeric の中には負の零を表現できるものもあります。そういった区別も含め
て、正負を区別する必要がある場合もあるでしょうから、簡単に区別が出来る
ようなっている事は意味があると思います。
かつて数などはひとつだけあればいいのだ、と言った人もいましたが、それは
現実的でなく、実際に Ruby の数はそのようになっていません。そうではなく、
複数ある表現を使いわけてひとつの系としてうまく働くようにするしかないの
だろうから、その為には、このようなものが必要であると思います。