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