OCaml
Typowe pułapki
Szukaj…
Używanie niewłaściwego operatora
W OCaml istnieją różne operatory arytmetyczne dla liczb zmiennoprzecinkowych i liczb całkowitych. Dodatkowo, operatory te mogą być używane tylko na 2 liczbach zmiennoprzecinkowych lub 2 liczbach całkowitych. Oto nieprawidłowe wyrażenia w OCaml
1.0 + 2.0
1 + 2.0
1 +. 2
1 +. 2.0
Prawidłowe wyrażenie dla każdego z nich to odpowiednio
1. +. 2.
float_of_int 1 +. 2.
1 + 2
float_of_int 1 +. 2.
W OCaml nie ma automatycznego rzucania liczb całkowitych na zmiennoprzecinkowe lub odwrotnie. Wszystko jest jednoznaczne. Oto lista operatorów liczb całkowitych i zmiennoprzecinkowych
| Operacja | Operator liczb całkowitych | Operator pływaka |
|---|---|---|
| Dodanie | a + b | c +. d |
| Odejmowanie | a - b | c -. d |
| Mnożenie | a * b | c *. c |
| Podział | a / b | c /. d |
| Moduł | a mod b | modfloat cd |
| Potęgowanie | Nie dotyczy | c ** d |
Gdzie i a b są liczbami całkowitymi i c i d są pływaki.
Zapominanie nawiasów wokół argumentów funkcji
Częstym błędem jest zapominanie o otaczających argumentach funkcji złożonej z nawiasami, co prowadzi do błędów pisowni.
# string_of_int 1+1;;
Error: This expression has type string but an expression was expected of type int
Wynika to z pierwszeństwa. W rzeczywistości powyższe ocenia do
# (string_of_int 1) + 1;;
co jest złe. Poprawna składnia byłaby
# string_of_int (1+1);;
- : string = "2"