Skip to content

Commit 673ee08

Browse files
committed
Add more numeric types
1 parent 2f624ea commit 673ee08

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

scheme-types.lisp

+20-5
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,37 @@
2828

2929
;;;; Type definitions
3030

31+
(define-scheme-type* (number?) numberp
32+
'number)
33+
34+
(define-scheme-type* (complex?) numberp
35+
'number)
36+
37+
(define-scheme-type* (real?) realp
38+
'real)
39+
40+
(define-scheme-type (rational?)
41+
'(or rational float))
42+
43+
;;; TODO: integer?
44+
3145
(define-scheme-type (exact?)
3246
"An exact number might be real or complex, but is not a float."
3347
`(or rational (complex rational)))
3448

35-
(define-scheme-type (exact-integer?)
36-
"An exact integer in Scheme is just a CL integer."
37-
`integer)
38-
3949
(define-scheme-type (inexact?)
4050
"An inexact number is just a float, real or complex."
4151
`(or float (complex float)))
4252

4353
(define-scheme-type (flonum?)
44-
"A Scheme flonum is just a double-float."
4554
'double-float)
4655

56+
(define-scheme-type (exact-integer?)
57+
`integer)
58+
59+
(define-scheme-type* (zero?) zerop
60+
'(or (real 0 0) (complex (real 0 0))))
61+
4762
(define-scheme-type (boolean?)
4863
"
4964
The two symbols that represent a Scheme Boolean, which externally are

standard-procedures.lisp

+5-5
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,16 @@
3939
;;; Numerical predicates
4040

4141
(define-scheme-predicate (number? obj)
42-
(numberp obj))
42+
(number? obj))
4343

4444
(define-scheme-predicate (complex? obj)
45-
(numberp obj))
45+
(complex? obj))
4646

4747
(define-scheme-predicate (real? obj)
48-
(realp obj))
48+
(real? obj))
4949

5050
(define-scheme-predicate (rational? obj)
51-
(or (rationalp obj) (floatp obj)))
51+
(rational? obj))
5252

5353
(define-scheme-predicate (integer? obj)
5454
(or (integerp obj)
@@ -90,7 +90,7 @@
9090
(apply #'>= x more-numbers))
9191

9292
(define-scheme-predicate (zero? z)
93-
(zerop z))
93+
(zero? z))
9494

9595
(define-scheme-predicate (positive? x)
9696
(plusp x))

0 commit comments

Comments
 (0)