Feature #5521
closedNumeric#rational?、Numeric#complex?、Numeric#float? の追加
Description
今のところ Common Lisp の rationalp などに似た仕様を考えています。
rational? は Integer や Rational に対しても真になります。float? は組み
込みに関しては Float だけですが、それ以外の実装についてもあればそれも真
になります。complex? も同様です。
別の考えとして、Scheme のような述語に仕様変更する考えもあります。その場
合、クラスを見るのではなく、integer? は、1、1.0、Rational(1) のいずれに
対しても真を返す事になります。
いずれにしても特定のクラスと一対一対応するものは意図していません。
実際に、complex の実装でも必要になっています。今は仕方がないので胡麻化
しに近いもので、もうひとつ別の複素数があったり、別の浮動小数点数実装が
あった場合に対応できません。
Updated by matz (Yukihiro Matsumoto) over 12 years ago
まつもと ゆきひろです
In message "Re: [ruby-dev:44720] [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 はどうな
んでしょうね。
まつもと ゆきひろ /:|)
Updated by Anonymous over 12 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/5521Author: 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 の実装でも必要になっています。今は仕方がないので胡麻化
しに近いもので、もうひとつ別の複素数があったり、別の浮動小数点数実装が
あった場合に対応できません。
Updated by mrkn (Kenta Murata) over 12 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
Updated by tadf (tadayoshi funaba) over 12 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? も真になるものだと考
えていますが、合ってますか?
はい。
Updated by tadf (tadayoshi funaba) over 12 years ago
complex? も同様です。
complex?が偽になるのはどういう場合ですか?
real?を作らず、complex?を作る理由は?
CL の complexp は、実数でない複素数という意味で、Scheme の complex? は
number? と同じという事でしょう。real? は 1.9 に既にあります。
Updated by mrkn (Kenta Murata) over 12 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
Updated by ko1 (Koichi Sasada) about 11 years ago
- Assignee set to matz (Yukihiro Matsumoto)
宙ぶらりんになっているようなので、まつもとさんにアサインしておきます。
ご検討下さい。
(ふなばさんか、mrkn のほうが良かった?)
Updated by naruse (Yui NARUSE) over 3 years ago
- Status changed from Open to Feedback
- Target version deleted (
3.0)