Project

General

Profile

Actions

Feature #5521

open

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

Added by tadf (tadayoshi funaba) almost 10 years ago. Updated 11 months ago.

Status:
Feedback
Priority:
Normal
Target version:
-
[ruby-dev:<unknown>]

Description

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

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

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

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

Updated by matz (Yukihiro Matsumoto) almost 10 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 almost 10 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

Updated by mrkn (Kenta Murata) almost 10 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) almost 10 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) almost 10 years ago

complex? も同様です。

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

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

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

Updated by mrkn (Kenta Murata) almost 10 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) over 8 years ago

  • Assignee set to matz (Yukihiro Matsumoto)

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

Actions #8

Updated by naruse (Yui NARUSE) 11 months ago

  • Target version deleted (3.0)
  • Status changed from Open to Feedback
Actions

Also available in: Atom PDF