comparison operators and *typos
Aubrey Jaffer 20 Jun 2005 02:06 UTC
| procedure: = z1 z2 z3 ...
| procedure: < x1 x2 x3 ...
| procedure: > x1 x2 x3 ...
| procedure: <= x1 x2 x3 ...
| procedure: >= x1 x2 x3 ...
| These procedures return #t if their arguments are (respectively):
| equal, monotonically increasing, monotonically decreasing,
| monotonically nondecreasing, or monotonically nonincreasing.
|
| ...
| (= 0 -0) ==> #t
|
| For any finite positive number x:
|
| (< #e-1/0 -x -0 0 x 1/0)) ==> #t
|
| These predicates are required to be transitive.
A sequence cannot be both equal and monotonically increasing.
(= -0 0) conflicts with (< -0 0).
| library procedure: infinite? z
"Infinite" means not finite. R5RS has `ZERO?' but not `NONZERO?';
`POSITIVE?', but not `NONPOSITIVE?'; `NEGATIVE?' but not `NONNEGATIVE?'
`FINITE?' is more in keeping with R5RS procedure names.
| library procedure: zero? z
| library procedure: positive? x
| library procedure: negative? x
| library procedure: odd? n
| library procedure: even? n
| These numerical predicates test a number for a particular
| property, returning #t or #f. See note above.
|
| (positive? #e1/0) ==> #t
| (negative? #e-1/0) ==> #t
| (infinite? #e-1/0) ==> #t
| (infinite? #e0/0) ==> #t
| (positive? 0) ==> #f
| (negative? -0) ==> #f
What does (zero? -0) return?
If (negative? -0) returns #f, and (= -0 0) returns #t, how does one
test for `-0'?
| procedure: numerator q
| procedure: denominator q
| These procedures return the numerator or denominator of their
| argument; the result is computed as if the argument was
| represented as a fraction in lowest terms. The denominator is
| always positive or zero. The denominator of 0 is defined to be
| 1.
|
| (numerator (/ 6 4)) ==> 3
| (denominator (/ 6 4)) ==> 2
| (denominator
| (exact->inexact (/ 6 4))) ==> 2.0
|
*| (denominator #e1/0) ==> 1
*| (denominator #e-1/0) ==> -1
*| (numerator #e1/0) ==> 0
*| (numerator #e-1/0) ==> 0
*Should numerator and denominator be swapped in the last 4 lines?
What does (exact? -0) return?
What does (integer? -0) return?
What does (rational? -0) return?
What does (numerator -0) return?
What does (denominator -0) return?
What does (floor -0) return?
What does (ceiling -0) return?
What does (* -0 -0) return?
What does (sqrt 0) return?
| procedure: - z1 z2
| procedure: - z
| optional procedure: - z1 z2 ...
| procedure: / z1 z2
| procedure: / z
| optional procedure: / z1 z2 ...
| With one argument, these procedures return the additive or
| multiplicative inverse of their argument.
|
| With two or more arguments:
|
| (- z1 . z2) => (apply + z1 (map - z2))
| (/ z1 . z2) => (apply * z1 (map / z2))
|
| (- 0) ==> -0
| (- -0) ==> 0
| (- #e1/0) ==> #e-1/0
| (- #-e1/0) ==> #e1/0
| (- 3) ==> -3
|
| (/ 0) ==> #e1/0
| (/ -0) ==> #e-1/0
*| (/ #e1/0) ==> #0
*| (/ #e-1/0) ==> #-0
| (/ 3) ==> 1/3
*Should `==> #' be replaced with `==> #e'?
| Implementation
|
| Here is my implementation, which is based on a Scheme implementation
| that supports arbitrary-big integer arithmetic as well as exact
| rational number computation. To avoid confusion with identifies in
| base-Scheme, all procedures defined in this SRFI (except infinite?)
| and prefixed with "my" or "my-". This reference implementation also
| requires SRFI-9, SRFI-13, SRFI-16, and SRFI-23.
|
| (separate file attached)
There is no link to the implementation file.