Common Pitfalls
Using the wrong operator
In OCaml, there are different arithmetic operators for floats and integers. Additionally, these operators can only be used on 2 floats or 2 integers. Here are invalid expressions in OCaml
1.0 + 2.0
1 + 2.0
1 +. 2
1 +. 2.0The correct expression for each of these respectively are
1. +. 2.
float_of_int 1 +. 2.
1 + 2
float_of_int 1 +. 2.There is no automatic casting of integers to floats or vice-versa in OCaml. Everything is explicit. Here is a list of the integer and float operators
| Operation | Integer Operator | Float Operator |
|---|---|---|
| Addition | a + b |
c +. d |
| Subtraction | a - b |
c -. d |
| Multiplication | a * b |
c *. c |
| Division | a / b |
c /. d |
| Modulus | a mod b |
modfloat c d |
| Exponentiation | N/a | c ** d |
Where a and b are integers and c and d are floats. |
Forgetting parentheses around function arguments
A common mistake is to forget surrounding compound function arguments with parentheses, leading to type errors.
# string_of_int 1+1;;
Error: This expression has type string but an expression was expected of type intThis is because of the precedence. In fact, the above evaluates to
# (string_of_int 1) + 1;;which is wrong. A correct syntax would be
# string_of_int (1+1);;
- : string = "2"