Page
Library
Module
Module type
Parameter
Class
Class type
Source
Tablecloth.IntSourceThe platform-dependant signed integer type. An int is a whole number. Valid syntax for ints includes:
0
42
9000
1_000_000
1_000_000
0xFF (* 255 in hexadecimal *)
0x000A (* 10 in hexadecimal *)Note: The number of bits used for an int is platform dependent.
When targeting native OCaml uses 31-bits on a 32-bit platforms and 63-bits on a 64-bit platforms which means that int math is well-defined in the range -2 ** 30 to 2 ** 30 - 1 for 32bit platforms -2 ** 62 to 2 ** 62 - 1 for 64bit platforms.
You can read about the reasons for OCamls unusual integer sizes here.
When targeting JavaScript, that range is -2 ** 53 to 2 ** 53 - 1.
Outside of that range, the behavior is determined by the compilation target.
ints are subject to overflow, meaning that Int.maximumValue + 1 = Int.minimumValue.
Historical Note: The name int comes from the term integer). It appears that the int abbreviation was introduced in the programming language ALGOL 68.
Today, almost all programming languages use this abbreviation.
Note You do not need to open the Int module to use the (+), (-), (*) or (/) operators, these are available as soon as you open Tablecloth
Subtract numbers
Int.subtract 4 3 = 1Alternatively the operator can be used:
4 - 3 = 1See Int.subtract
Multiply ints like
Int.multiply 2 7 = 14Alternatively the operator can be used:
(2 * 7) = 14See Int.multiply
Integer division:
Int.divide 3 ~by:2 = 127 / 5 = 5Notice that the remainder is discarded.
Throws Division_by_zero when the by (the divisor) is 0.
See Int.divide
Exponentiation, takes the base first, then the exponent.
Int.power ~base:7 ~exponent:3 = 343Alternatively the ** operator can be used:
7 ** 3 = 343Flips the 'sign' of an integer so that positive integers become negative and negative integers become positive. Zero stays as it is.
Int.negate 8 = (-8)Int.negate (-7) = 7Int.negate 0 = 0Alternatively the operator can be used:
~-(7) = (-7)See Int.negate
Perform modular arithmetic.
If you intend to use modulo to detect even and odd numbers consider using Int.isEven or Int.isOdd.
Int.modulo ~by:2 0 = 0Int.modulo ~by:2 1 = 1Int.modulo ~by:2 2 = 0Int.modulo ~by:2 3 = 1Our modulo function works in the typical mathematical way when you run into negative numbers:
List.map ~f:(Int.modulo ~by:4) [(-5); (-4); -3; -2; -1; 0; 1; 2; 3; 4; 5 ] =
[3; 0; 1; 2; 3; 0; 1; 2; 3; 0; 1]Use Int.remainder for a different treatment of negative numbers.
Get the remainder after division. Here are bunch of examples of dividing by four:
List.map ~f:(Int.remainder ~by:4) [(-5); (-4); (-3); (-2); (-1); 0; 1; 2; 3; 4; 5] =
[(-1); 0; (-3); (-2); (-1); 0; 1; 2; 3; 0; 1]Use Int.modulo for a different treatment of negative numbers.
Returns the larger of two ints
Int.maximum 7 9 = 9Int.maximum (-4) (-1) = (-1)Returns the smaller of two ints
Int.minimum 7 9 = 7Int.minimum (-4) (-1) = (-4)Check if an int is even
Int.isEven 8 = trueInt.isEven 7 = falseInt.isEven 0 = trueCheck if an int is odd
Int.isOdd 7 = trueInt.isOdd 8 = falseInt.isOdd 0 = falseClamps n within the inclusive lower and upper bounds.
Int.clamp ~lower:0 ~upper:8 5 = 5Int.clamp ~lower:0 ~upper:8 9 = 8Int.clamp ~lower:(-10) ~upper:(-5) 5 = (-5)Throws an Invalid_argument exception if lower > upper
Checks if n is between lower and up to, but not including, upper.
Int.inRange ~lower:2 ~upper:4 3 = trueInt.inRange ~lower:5 ~upper:8 4 = falseInt.inRange ~lower:(-6) ~upper:(-2) (-3) = trueThrows an Invalid_argument exception if lower > upper
Convert an int into a string representation.
Int.toString 3 = "3"Int.toString (-3) = "-3"Int.toString 0 = "0"Guarantees that
Int.(fromString (toString n)) = Some n Attempt to parse a string into a int.
Int.fromString "0" = Some 0.Int.fromString "42" = Some 42.Int.fromString "-3" = Some (-3)Int.fromString "123_456" = Some 123_456Int.fromString "0xFF" = Some 255Int.fromString "0x00A" = Some 10Int.fromString "Infinity" = NoneInt.fromString "NaN" = None