Feature #5521

Numeric#rational?、Numeric#complex?、Numeric#float? の追加

Added by tadayoshi funaba over 2 years ago. Updated about 1 year ago.

[ruby-dev:<unknown>]
Status:Open
Priority:Normal
Assignee:Yukihiro Matsumoto
Category:core
Target version:Next Major

Description

今のところ Common Lisp の rationalp などに似た仕様を考えています。
rational? は Integer や Rational に対しても真になります。float? は組み
込みに関しては Float だけですが、それ以外の実装についてもあればそれも真
になります。complex? も同様です。

別の考えとして、Scheme のような述語に仕様変更する考えもあります。その場
合、クラスを見るのではなく、integer? は、1、1.0、Rational(1) のいずれに
対しても真を返す事になります。

いずれにしても特定のクラスと一対一対応するものは意図していません。

実際に、complex の実装でも必要になっています。今は仕方がないので胡麻化
しに近いもので、もうひとつ別の複素数があったり、別の浮動小数点数実装が
あった場合に対応できません。

History

#1 Updated by Yukihiro Matsumoto over 2 years ago

まつもと ゆきひろです

In message "Re: [ruby-trunk - Feature #5521][Open] Numeric#rational?、Numeric#complex?、Numeric#float? の追加"
on Mon, 31 Oct 2011 20:50:27 +0900, tadayoshi funaba redmine@ruby-lang.org writes:

|今のところ Common Lisp の rationalp などに似た仕様を考えています。
|rational? は Integer や Rational に対しても真になります。float? は組み
|込みに関しては Float だけですが、それ以外の実装についてもあればそれも真
|になります。complex? も同様です。
|
|別の考えとして、Scheme のような述語に仕様変更する考えもあります。その場
|合、クラスを見るのではなく、integer? は、1、1.0、Rational(1) のいずれに
|対しても真を返す事になります。
|
|いずれにしても特定のクラスと一対一対応するものは意図していません。

特定のクラスと一対一対応するのでないのであれば意味があるよう
な気がします。この場合 1.0 に対して integer? が真を返すので
あれば、1.0にかなり近い値、たとえば 1.0 / 3.0 * 3.0 はどうな
んでしょうね。

                             まつもと ゆきひろ /:|)

#2 Updated by Anonymous over 2 years ago

ふなばさん

complex? も同様です。

complex?が偽になるのはどういう場合ですか?

real?を作らず、complex?を作る理由は?
--
Tomoaki NISHIYAMA

Advanced Science Research Center,
Kanazawa University,
13-1 Takara-machi,
Kanazawa, 920-0934, Japan

On 2011/10/31, at 20:50, tadayoshi funaba wrote:

Issue #5521 has been reported by tadayoshi funaba.


Feature #5521: Numeric#rational?、Numeric#complex?、Numeric#float? の追加
http://redmine.ruby-lang.org/issues/5521

Author: tadayoshi funaba
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 2.0

今のところ Common Lisp の rationalp などに似た仕様を考えています。
rational? は Integer や Rational に対しても真になります。float? は組み
込みに関しては Float だけですが、それ以外の実装についてもあればそれも真
になります。complex? も同様です。

別の考えとして、Scheme のような述語に仕様変更する考えもあります。その場
合、クラスを見るのではなく、integer? は、1、1.0、Rational(1) のいずれに
対しても真を返す事になります。

いずれにしても特定のクラスと一対一対応するものは意図していません。

実際に、complex の実装でも必要になっています。今は仕方がないので胡麻化
しに近いもので、もうひとつ別の複素数があったり、別の浮動小数点数実装が
あった場合に対応できません。

http://redmine.ruby-lang.org

#3 Updated by Kenta Murata over 2 years ago

むらたです。

(2011.11.01 04:04 ), Yukihiro Matsumoto wrote:

|別の考えとして、Scheme のような述語に仕様変更する考えもあります。その場
|合、クラスを見るのではなく、integer? は、1、1.0、Rational(1) のいずれに
|対しても真を返す事になります。
|
|いずれにしても特定のクラスと一対一対応するものは意図していません。

特定のクラスと一対一対応するのでないのであれば意味があるよう
な気がします。この場合 1.0 に対して integer? が真を返すので
あれば、1.0にかなり近い値、たとえば 1.0 / 3.0 * 3.0 はどうな
んでしょうね。

これは私も気になりました。1.0.float? が真になるなら
1.0.integer? は偽になって欲しいと直感的に考えてしまいます。
Float#rational? はどうなりますか?

この方向性で定義される場合、Rational(1).integer? が真になる事について、
異論はありません。その場合は Complex(1, 0).ineger? も真になるものだと考
えていますが、合ってますか?

--
Kenta Murata muraken@gmail.com
1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062

#4 Updated by tadayoshi funaba over 2 years ago

特定のクラスと一対一対応するのでないのであれば意味があるよう
な気がします。この場合 1.0 に対して integer? が真を返すので
あれば、1.0にかなり近い値、たとえば 1.0 / 3.0 * 3.0 はどうな
んでしょうね。

これは私も気になりました。1.0.float? が真になるなら
1.0.integer? は偽になって欲しいと直感的に考えてしまいます。
Float#rational? はどうなりますか?

整数は x == x.round という判断でしょう。Scheme 式だと float も
rational でしょう。

この方向性で定義される場合、Rational(1).integer? が真になる事について、
異論はありません。その場合は Complex(1, 0).ineger? も真になるものだと考
えていますが、合ってますか?

はい。

#5 Updated by tadayoshi funaba over 2 years ago

complex? も同様です。

complex?が偽になるのはどういう場合ですか?

real?を作らず、complex?を作る理由は?

CL の complexp は、実数でない複素数という意味で、Scheme の complex? は
number? と同じという事でしょう。real? は 1.9 に既にあります。

#6 Updated by Kenta Murata over 2 years ago

むらたです。

(2011.11.01 21:13 ), Tadayoshi Funaba wrote:

これは私も気になりました。1.0.float? が真になるなら
1.0.integer? は偽になって欲しいと直感的に考えてしまいます。
Float#rational? はどうなりますか?

整数は x == x.round という判断でしょう。Scheme 式だと float も
rational でしょう。

「Float は inexact な rational」という位置付けにするんですね。
それなら納得です。

--
Kenta Murata muraken@gmail.com
1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062

#7 Updated by Koichi Sasada about 1 year ago

  • Assignee set to Yukihiro Matsumoto

宙ぶらりんになっているようなので、まつもとさんにアサインしておきます。
ご検討下さい。
(ふなばさんか、mrkn のほうが良かった?)

Also available in: Atom PDF