
Do you agree with me that the behavior I indicated witnesses a (big) XSB bug?
It is more of an inconsistency than a bug: XSB has chosen not to evaluate variables on the right side of is/2 - Quintus used to do the same. Long ago, I didn't understand that there are good reasons for this choice. Now I think that Prolog would be better of without this feature.
Terry, why does the following not work as a fix in the compiler ? At compile time, replace X is Y by
(number(Y) -> X = Y ; throw(appropriate error) ) That would give consistent behaviour, no ? Even though not ISO. You don't have to do such a thing for </2 (and friends) because of the rest of XSB's compilation schema for arithmetic ... which has its more important problems of course:
| ?- -2147483648 < 2147483647 .
++Error[XSB]: [Runtime/C] Overflow in integer, returning MAX_INT
no | ?- -2147483648 < 1 .
++Error[XSB]: [Runtime/C] Overflow in integer, returning MAX_INT
yes | ?- -2 < 2147483647 .
no
All the above in XSB Version 3.0.1 (Sagres) of August 7, 2006
Cheers
Bart Demoen