12
votes

Une chose étrange ocaml

Quelqu'un peut-il expliquer ce comportement OCAML TOLLEVEL?

# 1________________________________1;;
- : int = 11


1 commentaires

p.s. La même chose est vraie dans Perl: Imprimer 1 ________________________________ 1; . Ruby permet également des soulignements, mais pas consécutifs


3 Réponses :


19
votes

Les soulignements sont autorisés dans des nombres (et ignorés) dans OCAML. De http://www.cs.ru.nl/~Tews/htmlman-3.10.10 /lex.html#xhtoc5 :

Pour la commodité et la lisibilité, les caractères de soulignement (_) sont acceptés (et ignorés) dans les littéraux entier.


3 commentaires

OK, inattendu. Mais je suppose que les gens peuvent vouloir écrire 1234567890 comme 1_234_567_890. Intéressant...


@Surikator: Je pense que c'était l'intention. Juste en dessous de l'endroit où j'ai cité, _ est autorisé dans les littéraux à virgule flottante également (et y ignora également).


Ce qui suit mentionne la convention lexicale pour les flotteurs et les entiers (remarquez où le caractère optionnel _ est; même 1___ fonctionne.): caml.inria.fr/pub/docs/manual-ocaml/lex.html



4
votes

Il existe plusieurs langages de programmation qui acceptent le caractère de soulignement comme un caractère non significatif dans un entier. Ada, Perl, Ocaml et probablement une autre langue l'utilisent pour séparer mille, millions et milliards ... mais vous pouvez utiliser _ n'importe où à l'intérieur de l'entier.


0 commentaires

5
votes

C'est une fonctionnalité très utile pour éviter les insectes et faciliter la lecture de gros entiers:

1_000_000_000 est plus facile à lire que 100000000 (Avez-vous remarqué que j'ai oublié un zéro?).


0 commentaires