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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top