Ocaml Int y valores negativos.
-
06-07-2019 - |
Pregunta
Dado este fragmento de código OCaml:
let rec range a b =
if a > b then []
else a :: range (a+1) b
;;
El Repl me dice que su tipo es:
val range : int -> int -> int list = <fun>
Dándole entradas como:
range 0 4;;
devuelve la lista:
- : int list = [0; 1; 2; 3; 4]
Sin embargo, proporcionar la entrada
range -4 2;;
Da el error:
Characters 0-5:
range -4 1;;
^^^^^
This expression has type int -> int -> int list but is here used with type int.
¿Qué es esto tratando de decirme?
Solución
cuando escribas,
range -4 2;;
necesitas recordar que -
es una función, una función de infijo, no una negación unitaria.
Para hacer la negación unaria, puedes hacer una de dos cosas, 1) precede: firma con un ~, como ~ -4, o usa paréntesis.
Otros consejos
Me acabo de dar cuenta de que necesito envolver el
-4 in parenthesis
es decir, llamando:
range (-4) 0;;
Da:
- : int list = [-4; -3; -2; -1; 0]
Dejaré esta pregunta en caso de que alguien más encuentre el mismo problema.
Para resumir el problema, -
se interpreta como una función y no como el signo del token 4
.
Puede ver: problemas de idioma de OCaml para obtener más información.