diff options
author | Mark H Weaver <mhw@netris.org> | 2011-01-28 23:42:01 -0500 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-01-30 13:08:53 +0100 |
commit | 8f2339c436ce4b9c606246cb341f2a5f35c1de26 (patch) | |
tree | 6a75b3b3c497bf722e8cc5169b8117792cd3aa03 /module/rnrs | |
parent | c960e55600962c45be7e623859eddca3fad87783 (diff) | |
download | guile-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.scm | 19 |
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)))) |