Ocaml Int e valores negativos
-
06-07-2019 - |
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?
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.