Kernel numeric classes: [abstract] [abstract] [abstract] [abstract] [sealed] methods: >, <=, >= [from <, =] /=, ZERO? [from =] EXPT by methods: MODULO, REMAINDER [from floor/, truncate/], FLOOR, CEILING, ROUND, TRUNCATE [from floor/, etc.] POSITIVE?, NEGATIVE?, ABS, MIN, MAX [from <] methods: ODD?, EVEN? [from LOGAND, =] LOGBIT? [from ASH, LOGAND, =] methods: +, *, -, UNARY -, FLOOR/, CEILING/, ROUND/, TRUNCATE/. INTEGRAL? [always true] LOGAND, LOGIOR, LOGXOR, LOGNOT, ASH, LOGBIT? ID?, =, =HASH, <. Primitive indices are (array, sequence, etc.) Operations on small integers must yield small integers. If an overflow occurs, an error should be signalled (but portable applications can't count on this happening.) Note: if LOGANDC2, etc., aren't deleted, then they'd be methods. Note: / has kernel no methods. Note: ID? must be generic if complex, etc., are moved into libraries and we want to preserve the current semantics. Note: Glossing over the distinction between BINARY= and =, BINARY< and <, etc. Since infix won't have N-ary operators, this distinction is probably no longer necessary. Float library: [sealed] , , methods: +, *, -, unary -, /, FLOOR/, CEILING/, ROUND/, TRUNCATE/. INTEGRAL? [always false ???] ID?, =, =HASH, <. Methods that implement float contagion are defined for the cross product of , , and . Mixed precision < and = are correctly implementable using contagion; It's only when there are ratios that we have to worry about losing precision with contagion. functions: SIN, COS, TAN, ASIN, ACOS, ATAN, SINH, COSH, TANH, ASINH, ACOSH, ATANH, EXP, LOG, SQRT: [GF defined] These functions take a float and return a float with the same class. ATAN2[GF defined], EXPT: These two-arg functions must do float contagion. Note: Semantics can be simplified slightly (made less arbitrary) by not allowing integer arguments to these functions. In CL, integers are arbitrarily coerced to single precision (a dubious convenience.) Extended precision library: [] [] [sealed] [] [sealed] Explicit AS required to convert small to extended or vice-versa. It is a type error to pass an extended int to an operation expecting a small int, even if the integer could be coerced to a small integer. Extended integers are contagious. Operations on mixed short and extended integers produce an extended result. , methods: NUMERATOR, DENOMINATOR [GF defined, result is an ] +, *, -, UNARY -, /, FLOOR/, CEILING/, ROUND/, TRUNCATE/. =, <, ID?, =HASH, INTEGRAL? EXPT [second arg must be ???] methods: LOGAND, LOGIOR, LOGXOR, LOGNOT LCM, GCD [GF defined] ASH [second arg must be ] , , methods: FLOOR/, CEILING/, ROUND/, TRUNCATE/ [override float library methods] =, <: [To do mixed float/rational compare, RATIONALIZE the float.] RATIONALIZE [GF defined] Complex library: [complex subtypes] (complex single-float, complex double-float)?