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