Result is Number1 mod Number2
which should be preferred for portability.
The modulus operation computes the remainder corresponding to the flooring division div. The following relation always holds:
X =:= (X mod Y) + (X div Y) * Y.
The result Result is either zero, or has the same sign as Number2.
In coroutining mode, if Number1 or Number2 are uninstantiated, the call to mod/3 is delayed until these variables are instantiated.
CAUTION: The behaviour of mod was changed for standard compliance! In ECLiPSe versions up to 5.8, mod computed the remainder corresponding to the truncating division //, and thus gave different results for arguments with opposite signs. Moreover, the operator precedence was changed from op(300,xfx,mod) to op(400,yfx,mod), which means that a*b mod c is now parsed as (a*b)mod c rather than a*(b mod c).
Success:
X is 10 mod 3. (gives X = 1)
mod( 10, 3, 1).
mod(-10, 3, 2).
mod( 10, -3, -2).
mod(-10, -3, -1).
mod( 11, 3, 2).
Fail:
mod(1, 2, 3).
mod(6, 2.0, 3.0).
mod(5, 2, r).
Error:
mod(A, 2, 6). (Error 4).
mod(2, 0, Result). (Error 20).
mod(4 + 2, 2, 12). (Error 24).