Improved behavior of coercions with n-ary arithmeric operations.

original commit: d078305a59368156e0c977798af4cb805bc3b679
This commit is contained in:
Vincent St-Amour 2010-07-19 12:26:53 -04:00
parent 53f7550b51
commit 43683352c5

View File

@ -235,29 +235,24 @@
[* (apply cl->*
(append (for/list ([t (list -Pos -Nat -Integer -ExactRational -NonnegativeFlonum -Flonum)]) (->* (list) t t))
(list (->* (list -Pos) -NonnegativeFlonum -NonnegativeFlonum))
(list (->* (list -NonnegativeFlonum) -Pos -NonnegativeFlonum))
(list (->* (list -Pos) -Flonum -Flonum))
(list (->* (list -Flonum) -Pos -Flonum))
(list (->* (list) (Un -Pos -NonnegativeFlonum) -NonnegativeFlonum))
(list (->* (list) (Un -Pos -Flonum) -Flonum))
(list (->* (list) -Real -Real))
(list (->* (list -Flonum) -InexactComplex -InexactComplex))
(list (->* (list -InexactComplex) -Flonum -InexactComplex))
(list (->* (list) -InexactComplex -InexactComplex))
(list (->* (list) (Un -InexactComplex -Flonum) -InexactComplex))
(list (->* (list) N N))))]
[+ (apply cl->*
(append (list (->* (list -Pos) -Nat -Pos))
(list (->* (list -Nat) -Pos -Pos))
(list (->* (list -Nat -Pos) -Nat -Pos))
(for/list ([t (list -Nat -Integer -ExactRational -NonnegativeFlonum -Flonum)]) (->* (list) t t))
(list (->* (list -Nat) -NonnegativeFlonum -NonnegativeFlonum))
(list (->* (list -NonnegativeFlonum) -Nat -NonnegativeFlonum))
;; special cases for promotion to inexact, not exhaustive
;; valid for + and -, but not for * and /, since (* <float> 0) is exact 0 (i.e. not a float)
(list (->* (list) (Un -Nat -NonnegativeFlonum) -NonnegativeFlonum))
(list (->* (list -Flonum) -Real -Flonum))
(list (->* (list -Real -Flonum) -Real -Flonum))
(list (->* (list) -Real -Real))
(list (->* (list N) -InexactComplex -InexactComplex))
(list (->* (list) (Un -Real -InexactComplex) -InexactComplex))
(list (->* (list -InexactComplex) N -InexactComplex))
(list (->* (list) -InexactComplex -InexactComplex))
(list (->* (list N -InexactComplex) N -InexactComplex))
(list (->* (list) N N))))]
[- (apply cl->*
@ -266,9 +261,9 @@
(list (->* (list -Flonum) -Real -Flonum))
(list (->* (list -Real -Flonum) -Real -Flonum))
(list (->* (list -Real) -Real -Real))
(list (->* (list N) -InexactComplex -InexactComplex))
(list (->* (list) (Un -Real -InexactComplex) -InexactComplex))
(list (->* (list -InexactComplex) N -InexactComplex))
(list (->* (list -InexactComplex) -InexactComplex -InexactComplex))
(list (->* (list N -InexactComplex) N -InexactComplex))
(list (->* (list N) N N))))]
[/ (apply cl->*
(append (list (->* (list -Integer) -Integer -ExactRational))
@ -277,8 +272,7 @@
;; only exact 0 as first argument can cause the result of a division involving inexacts to be exact
(list (->* (list -Flonum) -Real -Flonum))
(list (->* (list -Real) -Real -Real))
(list (->* (list -Flonum) -InexactComplex -InexactComplex))
(list (->* (list -InexactComplex) -Flonum -InexactComplex))
(list (->* (list (Un -Flonum -InexactComplex)) (Un -Real -InexactComplex) -InexactComplex))
(list (->* (list -InexactComplex) -InexactComplex -InexactComplex))
(list (->* (list N) N N))))]