[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: meta-comment on typing

This page is part of the web mail archives of SRFI 77 from before July 7th, 2015. The new archives for SRFI 77 contain all messages, not just those from before July 7th, 2015.




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
possibilities:

   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.

				Bear