R6RS:翻訳:R6RS:11.7.4.1 Numerical type predicates

R6RS:翻訳:R6RS:11.7.4.1 Numerical type predicates

11.7.4.1 数値型述語

[procedure] (number? obj)

[procedure] (complex? obj)

[procedure] (real? obj)

[procedure] (rational? obj)

[procedure] (integer? obj)

これらの数値型述語は任意の種類の引き数に適用することができる。それぞれ、オブジェクトがその名前の数値型である場合に #t を返し、それ以外には #f を返す。一般に、ある型述語が数値オブジェクトについて真である場合、より上位の型述語もまたその数値オブジェクトについて真である。したがって、ある型述語がある数値オブジェクトについて偽である場合、それより下位の型述語もまたその数値オブジェクトについて偽である。

z が複素数オブジェクトである場合、 (zero? (imag-part z)) かつ (exact? (imag-part z)) である場合、かつその場合にかぎり (real? z) は真である。

x が実数オブジェクトである場合、 (= x (/ k1 k2)) かつ (= (numerator x) k1) かつ (= (denominator x) k2) なる正確な整数オブジェクト k1k2 が存在する場合、かつその場合に限り、 (rational? x) は真である。

q が有理数オブジェクトである場合、 (= (denominator q) 1) が真である場合、かつその場合にかぎり (integer? q) は真である。 q が有理数オブジェクトでない場合、 (integer? q) は #f である。

(complex? 3+4i)                                ⇒  #t
(complex? 3)                                   ⇒  #t
(real? 3)                                      ⇒  #t
(real? -2.5+0.0i)                              ⇒  #f
(real? -2.5+0i)                                ⇒  #t
(real? -2.5)                                   ⇒  #t
(real? #e1e10)                                 ⇒  #t
(rational? 6/10)                               ⇒  #t
(rational? 6/3)                                ⇒  #t
(rational? 2)                                  ⇒  #t
(integer? 3+0i)                                ⇒  #t
(integer? 3.0)                                 ⇒  #t
(integer? 8/4)                                 ⇒  #t

(number? +nan.0)                               ⇒  #t
(complex? +nan.0)                              ⇒  #t
(real? +nan.0)                                 ⇒  #t
(rational? +nan.0)                             ⇒  #f
(complex? +inf.0)                              ⇒  #t
(real? -inf.0)                                 ⇒  #t
(rational? -inf.0)                             ⇒  #f
(integer? -inf.0)                              ⇒  #f

: number? を除いて、これらの型述語は不正確な数オブジェクトに対しては信頼性がない。これは、何らかの不正確性が結果に影響を与えるかもしれないからである。

[procedure] (real-valued? obj)

[procedure] (rational-valued? obj)

[procedure] (integer-valued? obj)

これらの数値型述語は任意の種類の引き数に適用することができる。 real-valued? 手続きはオブジェクトが数値オブジェクトで何らかの実数オブジェクトと = について等しい場合か、オブジェクトが非数である場合か、実数部が非数で虚数部が zero? について 0 であるようなオブジェクトである場合に #t を返す。 rational-valued? と integer-valued? 手続きはオブジェクトが数値オブジェクトで、その名前の型の何らかの数値オブジェクトと = について等しい場合に #t を返し、それ以外には #f を返す。

(real-valued? +nan.0)                          ⇒  #t
(real-valued? +nan.0+0i)                          ⇒  #t
(real-valued? -inf.0)                          ⇒  #t
(real-valued? 3)                               ⇒  #t
(real-valued? -2.5+0.0i)                       ⇒  #t
(real-valued? -2.5+0i)                         ⇒  #t
(real-valued? -2.5)                            ⇒  #t
(real-valued? #e1e10)                          ⇒  #t

(rational-valued? +nan.0)                      ⇒  #f
(rational-valued? -inf.0)                      ⇒  #f
(rational-valued? 6/10)                        ⇒  #t
(rational-valued? 6/10+0.0i)                   ⇒  #t
(rational-valued? 6/10+0i)                     ⇒  #t
(rational-valued? 6/3)                         ⇒  #t

(integer-valued? 3+0i)                         ⇒  #t
(integer-valued? 3+0.0i)                       ⇒  #t
(integer-valued? 3.0)                          ⇒  #t
(integer-valued? 3.0+0.0i)                     ⇒  #t
(integer-valued? 8/4)                          ⇒  #t

: これらの手続きは、与えられた数値オブジェクトが特定の型に数値的な正確性を失なうことなく変換できるかどうかを検査する。具体的には、これらの手続きの振る舞いは虚数部が不正確な 0 である複素数オブジェクトに対して real、 rational?、 integer? とは異なる。

: これらの型述語の振る舞いは不正確な数値オブジェクトに対しては信頼できない。これは、何らかの不正確性が結果に影響を与えるかもしれないからである。

[procedure] (exact? z)

[procedure] (inexact? z)

これらの数値述語は量の正確さに対する検査を提供する。任意の数値オブジェクトについて、これらの述語のどちらかが必ず真を返す。

(exact? 5)                           ⇒  #t
(inexact? +inf.0)                    ⇒  #t
More ...