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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top