summaryrefslogtreecommitdiff
path: root/module/rnrs
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2011-01-28 23:42:01 -0500
committerAndy Wingo <wingo@pobox.com>2011-01-30 13:08:53 +0100
commit8f2339c436ce4b9c606246cb341f2a5f35c1de26 (patch)
tree6a75b3b3c497bf722e8cc5169b8117792cd3aa03 /module/rnrs
parentc960e55600962c45be7e623859eddca3fad87783 (diff)
downloadguile-8f2339c436ce4b9c606246cb341f2a5f35c1de26.tar.gz
Implement R6RS `real-valued?', `rational-valued?', `integer-valued?'
* module/rnrs/base.scm (real-valued?, rational-valued?, integer-valued?): Implement in compliance with R6RS. * test-suite/tests/r6rs-base.test: Add test cases for `real-valued?', `rational-valued?', and `integer-valued?'. * NEWS: Add NEWS entries.
Diffstat (limited to 'module/rnrs')
-rw-r--r--module/rnrs/base.scm19
1 files changed, 11 insertions, 8 deletions
diff --git a/module/rnrs/base.scm b/module/rnrs/base.scm
index c7579c32e..04a7e23a8 100644
--- a/module/rnrs/base.scm
+++ b/module/rnrs/base.scm
@@ -102,14 +102,17 @@
(define (exact-integer-sqrt x)
(let* ((s (exact (floor (sqrt x)))) (e (- x (* s s)))) (values s e)))
- ;; These definitions should be revisited, since the behavior of Guile's
- ;; implementations of `integer?', `rational?', and `real?' (exported from this
- ;; library) is not entirely consistent with R6RS's requirements for those
- ;; functions.
-
- (define integer-valued? integer?)
- (define rational-valued? rational?)
- (define real-valued? real?)
+ (define (real-valued? x)
+ (and (complex? x)
+ (zero? (imag-part x))))
+
+ (define (rational-valued? x)
+ (and (real-valued? x)
+ (rational? (real-part x))))
+
+ (define (integer-valued? x)
+ (and (rational-valued? x)
+ (= x (floor (real-part x)))))
(define (vector-for-each proc . vecs)
(apply for-each (cons proc (map vector->list vecs))))