
//(+Number1, +Number2, -Result)

   Evaluates the integer quotient Number1 // Number2 and unifies the resulting
value with Result.



Arguments
   Number1             Integer.
   Number2             Integer.
   Result              A variable or integer.

Type
   Arithmetic

Description
   This predicate is used by the ECLiPSe compiler to expand evaluable
   arithmetic expressions.  So the call to //(Number1, Number2, Result) is
   equivalent to

    Result is Number1 // Number2

    which should be preferred for portability.

    This division operates on integer arguments, and delivers an integer
    result rounded towards zero (truncated).  The corresponding remainder
    is computed by the rem operation, such that the following equivalence
    always holds:

    X =:= (X rem Y) + (X // Y) * Y.


   In coroutining mode, if Number1 or Number2 are uninstantiated, the call
   to (//)/3 is delayed until these variables are instantiated.



Modes and Determinism
   //(+, +, -) is det

Exceptions
     4 --- Number1 or Number2 is not instantiated (non-coroutining mode    only).
     5 --- Number1 or Number2 is a number but not an integer.
     5 --- Result is a number but not an integer.
    24 --- Number1 or Number2 is not of a numeric type.
    24 --- Result is neither a number nor a variable.
    20 --- Illegal arithmetic operation:  division by 0

Examples
   
Success:
      X is 10 // 3.		( gives X = 3)

      //( 10,  3,  3).
      //(-10,  3, -3).
      //( 10, -3, -3).
      //(-10, -3,  3).

Fail:
      //(1, 2, 3).
Error:
      //(A, 2, 6).              (Error 4).
      //(5, 2, r).              (Error 5).
      //(6, 2.0, 3.0).          (Error 5).
      //(2, 0, Result).        (Error 20).
      //(4 + 2, 2, 12).        (Error 24).


See Also
   is / 2, div / 3, rem / 3
