Ocaml Int et valeurs négatives
-
06-07-2019 - |
Question
Étant donné cet extrait de code OCaml:
let rec range a b =
if a > b then []
else a :: range (a+1) b
;;
Le représentant m'indique que son type est:
val range : int -> int -> int list = <fun>
Donner des entrées telles que:
range 0 4;;
renvoie la liste:
- : int list = [0; 1; 2; 3; 4]
Cependant, en fournissant l'entrée
range -4 2;;
donne l'erreur:
Characters 0-5:
range -4 1;;
^^^^^
This expression has type int -> int -> int list but is here used with type int.
Qu'est-ce que cela essaie de me dire?
La solution
lorsque vous tapez,
range -4 2;;
vous devez vous rappeler que -
est une fonction, une fonction infixe, pas une négation unaire.
Pour faire une négation unaire, vous pouvez faire l’une des choses suivantes: 1) précéder - signer avec un ~, comme ~ -4, ou utiliser une parenthèse.
Autres conseils
Je viens de me rendre compte que je dois emballer le
-4 in parenthesis
c'est-à-dire appeler:
range (-4) 0;;
donne:
- : int list = [-4; -3; -2; -1; 0]
Je laisserai cette question posée si quelqu'un d'autre rencontre le même problème.
Pour résumer, le problème est que -
est interprété comme une fonction et non comme le signe du jeton 4
.
Vous pouvez consulter: Problèmes liés au langage OCaml pour plus d'informations.