[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: meta-comment on typing
On Thu, 6 Oct 2005, Marcin 'Qrczak' Kowalczyk wrote:
>Per Bothner <per@xxxxxxxxxxx> writes:
>> Since it *optional* static typing, I'm assuming that the specific
>> operations are "consistent" in the sense of the following example:
>> If (and (fixnum? x) (fixnum? y))
>> then: (eqv? (+ x y) (fx+ x y))
>It's not the same: (fx+ x y) returns a fixnum even if it overflows.
I think the consistency Per was asking about (correct me if
I'm wrong) might be more completely expressed as:
If (and (fixnum? x) (fixnum? y) (fixnum? (+ x y)))
Then (eqv? (+ x y) (fx+ x y)
Because +, even on integer-only arguments, has to deal with several
Case 1: one or more arguments are bignums, but the result is fixnum.
example: (+ (! 1000) (* (! 1000) -1))
Case 2: one or both arguments are bignums and the result is bignum.
example: (+ (! 1000) (! 1000))
Case 3: both arguments are fixnum but the result is bignum.
example: (+ MAXFIXNUM 22)
Case 4: both arguments are fixnum and the result is also fixnum.
example: (+ 22 0)
fx+, as I understand it, is specified to give the same results
as + only in case 4. Calling fx+ in cases 1,2,3 would be an error
and result in unspecified behavior.