Pergunta

Dado esse trecho de código OCaml:

let rec range a b =
  if a > b then []
  else a :: range (a+1) b
  ;;

O Repl me diz que seu tipo é:

val range : int -> int -> int list = <fun>

Causando insumos como:

range 0 4;;

devolve a lista:

- : int list = [0; 1; 2; 3; 4]

No entanto proporcionando a entrada

range -4 2;;

dá o erro:

Characters 0-5:
  range -4 1;;
 ^^^^^
This expression has type int -> int -> int list but is here used with type int.

O que é isso tentando me dizer?

Foi útil?

Solução

quando você digita,

range -4 2;;

é preciso lembrar que o - é uma função, uma função infix, não uma negação unário.

Para fazer negação unário você pode fazer uma de duas coisas, 1) preceede -. Sinal com um ~, como ~ -4, ou parêntese uso

Outras dicas

Eu só percebi que eu preciso para embrulhar o

-4 in parenthesis

isto é chamado:

range (-4) 0;;

Dá:

- : int list = [-4; -3; -2; -1; 0]

Vou deixar esta questão se meter qualquer outra pessoa se depara com o mesmo problema.

Apenas para resumir a questão é que - é interpretado como uma função e não como o sinal da 4 token.

Você pode ver: OCaml questões linguísticas para obter mais informações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top