Ocaml Int e valori negativi
-
06-07-2019 - |
Domanda
Dato questo frammento di codice OCaml:
let rec range a b =
if a > b then []
else a :: range (a+1) b
;;
Il Repl mi dice che il suo tipo è:
val range : int -> int -> int list = <fun>
Dandogli input come:
range 0 4;;
restituisce l'elenco:
- : int list = [0; 1; 2; 3; 4]
Fornendo comunque l'input
range -4 2;;
Fornisce l'errore:
Characters 0-5:
range -4 1;;
^^^^^
This expression has type int -> int -> int list but is here used with type int.
Cosa sta cercando di dirmi?
Soluzione
durante la digitazione,
range -4 2;;
devi ricordare che -
è una funzione, una funzione infix, non una negazione unaria.
Per fare una negazione unaria puoi fare una delle due cose, 1) precedere - firmare con un ~, come ~ -4, o usare la parentesi.
Altri suggerimenti
Ho appena realizzato che devo avvolgere
-4 in parenthesis
ovvero chiamando:
range (-4) 0;;
si ottiene:
- : int list = [-4; -3; -2; -1; 0]
Lascerò questa domanda in alto nel caso in cui altri incontrino lo stesso problema.
Solo per riassumere il problema è che -
viene interpretato come una funzione e non come il segno del token 4
.
Puoi vedere: Problemi di lingua OCaml per ulteriori informazioni.