Implement finite?, infinite?, and nan? from R7RS.
authorChris Hanson <org/chris-hanson/cph>
Wed, 2 May 2018 06:45:02 +0000 (23:45 -0700)
committerChris Hanson <org/chris-hanson/cph>
Wed, 2 May 2018 06:45:02 +0000 (23:45 -0700)
src/runtime/arith.scm
src/runtime/runtime.pkg

index 87e6c11b5cdb3f02bd0657437e741a7756c40bbe..6ca9e1de228e33d5f07055d2932519bba609981b 100644 (file)
@@ -937,6 +937,15 @@ USA.
        (or (rat:rational? x)
           (error:wrong-type-argument x #f 'exact?))))
 
+(define (real:finite? x)
+  (if (flonum? x) (flo:finite? x) #t))
+
+(define (real:infinite? x)
+  (if (flonum? x) (flo:infinite? x) #f))
+
+(define (real:nan? x)
+  (if (flonum? x) (flo:nan? x) #f))
+
 (define (real:zero? x)
   (if (flonum? x) (flo:zero? x) ((copy rat:zero?) x)))
 
@@ -1301,6 +1310,33 @@ USA.
   (and (real:exact? (rec:real-part z))
        (real:exact? (rec:imag-part z))))
 
+(define (complex:finite? z)
+  (if (recnum? z)
+      ((copy rec:finite?) z)
+      ((copy real:finite?) z)))
+
+(define (rec:finite? z)
+  (and (real:finite? (rec:real-part z))
+       (real:finite? (rec:imag-part z))))
+
+(define (complex:infinite? z)
+  (if (recnum? z)
+      ((copy rec:infinite?) z)
+      ((copy real:infinite?) z)))
+
+(define (rec:infinite? z)
+  (or (real:infinite? (rec:real-part z))
+      (real:infinite? (rec:imag-part z))))
+
+(define (complex:nan? z)
+  (if (recnum? z)
+      ((copy rec:nan?) z)
+      ((copy real:nan?) z)))
+
+(define (rec:nan? z)
+  (or (real:nan? (rec:real-part z))
+      (real:nan? (rec:imag-part z))))
+
 (define (complex:real-arg name x)
   (if (recnum? x) (rec:real-arg name x) x))
 
index 378feabb21cfb9f7d2c0104fc90a876e9b43ba35..9747d4e4cab2ccf438172758fbc5683c04ff8112 100644 (file)
@@ -3272,11 +3272,13 @@ USA.
          (exact? complex:exact?)
          (exp complex:exp)
          (expt complex:expt)
+         (finite? complex:finite?)
          (floor complex:floor)
          (floor->exact complex:floor->exact)
          (imag-part complex:imag-part)
          (inexact complex:exact->inexact)
          (inexact->exact complex:inexact->exact)
+         (infinite? complex:infinite?)
          (integer-ceiling complex:integer-ceiling)
          (integer-divide complex:divide)
          (integer-floor complex:integer-floor)
@@ -3287,6 +3289,7 @@ USA.
          (magnitude complex:magnitude)
          (make-polar complex:make-polar)
          (make-rectangular complex:make-rectangular)
+         (nan? complex:nan?)
          (negative? complex:negative?)
          (number:eqv? complex:eqv?)
          (number? complex:complex?)