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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top