Bonjour, j'ai un soucil avec la fonction random de caml
let nombre = Random.int(100);;
> ^^^^^^^^^^
L'étiquette int n'est pas définie.
Si quelqu'un pourrai m'aider ^^
Bonjour, j'ai un soucil avec la fonction random de caml
let nombre = Random.int(100);;
> ^^^^^^^^^^
L'étiquette int n'est pas définie.
Si quelqu'un pourrai m'aider ^^
Précises le type de nb!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 # let (nb: int) = Random.int(100);; val nb : int = 34
Salut !
Le problème ne vient pas de là. En OCaml les annotations de type sont presque toujours inutiles (ici en particulier). Et ce bout de code fonctionne bien évidemment tel quel dans le toplevel.Envoyé par BlueJack
On parle bien de OCaml n'est-ce pas ? Quel est le message exact de l'erreur (en anglais) ? Est-ce que tu rencontres ce problème partout (toplevel, compilateur). Si ce n'est pas le cas, est-ce que le problème apparaît dès l'ouverture d'une session avec le toplevel ? Peut-être un problème d'installation, ou une session du toplevel « polluée » (par exemple si tu as redéfini un module Random qui masque le module de la bibliothèque standard...)Envoyé par Soshius
Remarque en passant : les parenthèses sont inutiles. Random.int 100 va très bien.
Cordialement,
Cacophrène
Bonsoir,
Petite question à part sur le random. Après ma première réponse visiblement mauvaise qui fut:
J'ai recommencé sans mettre la précision et voici ce que j'ai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 # let (nb: int) = Random.int(100);; val nb : int = 34
Ai-je de la chance de ravoir le même tirage dans ce cas je vais tout de suite allé prendre mon billet de loto ou y a t'il quelque chose qui fais qu'un nombre aléatoire n'est pas vraiment aléatoire? (je m'étais déjà renseigné un peu mais je n'avais pas bien compris la notion de graine, etc...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 # let nb = Random.int 100;; val nb : int = 34
Merci
Il n'y a pas de hasard.
Random utilise une variable globale, c'est un état, une graine. La fonction Random.int ne peut pas sortir une valeur de son chapeau ; elle calcule un résultat à partir de la graine et met à jour la graine. Si on l'appelle une deuxième fois, ça enverra un autre résultat, simplement parce que la graine n'est plus la même.
Le problème se pose au lancement du programme : il ne faut pas que la graine soit toujours la même au début. Il faut l'initialiser à partir d'informations du système (par exemple, l'horloge du système, le numéro du processus, etc.). C'est la fonction Random.self_init qui s'en charge : il faut l'appeler une fois au lancement du programme.
Soshius : OCaml ou Caml light ?
Soshius > si tu fais du Caml Light, c'est random__int (deux underscores, attention !).
BlueJack > utilise (Random.self_init : unit -> unit) comme srand() en C (une seule fois avant l'exécution de tes fonctions Random). Cf. les explications de LLB.
Bonjour, merci cela fonctionne !
J'ai un autre soucil !!
Lorsque je compile avec caml (File/Compile) ca marche niquel quand je fait (File/Load Object)
Mais je ne peut toujours pas compiler par l'invité de commande
Mon fichier ressemble a ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 D:\FAC\Caml2\Prog Compile>camlc -o random.exe Random.ml File "Random.ml", line 4, characters 13-24: >let nombre = Random__int 100;; > ^^^^^^^^^^^ The value identifier Random__int is unbound.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 (*Programme qui génère un entier et demande a l'utilisateur de le trouver*) (*Génération de l'entier*) let nombre = Random__int 100;; (*Fonction qui demande a l'utilisateur de trouver le nombre généré*) let rec devine = fun (*Si l'utilisateur trouve du premier coup*) n 1 -> if int_of_string(n)=nombre then print_string "Bravo ! tu as trouvé du premier coup !\n" else if (int_of_string(n))>nombre then begin print_string ("Domage ! Le nombre est plus petit !\n"); devine n 2 end else begin print_string ("Domage ! Le nombre est plus grand !\n"); devine n 2 end (*Si l'utilisateur trouve en x coups*) |_ x -> begin print_string "Essai un autre nombre : "; let n2=read_line() in if int_of_string(n2)=nombre then print_string ("Bravo ! tu as trouvé en "^(string_of_int(x))^" coups.\n") else if (int_of_string(n2))>nombre then begin print_string ("Domage ! Le nombre est plus petit !\n"); devine n2 (x+1) end else begin print_string ("Domage ! Le nombre est plus grand !\n"); devine n2 (x+1) end end;; (*Présentation du programme et appel de la fonction de devine*) begin print_string "Devine un nombre entre 1 et 100\nEntre un nombre : "; let n = read_line() in devine n 1 end;;
Remplace ta ligne 4 par:
Juste pour voir
Code : Sélectionner tout - Visualiser dans une fenêtre à part let nombre = Random.int 100;;
Pareil ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 D:\FAC\Caml2\Prog Compile>camlc -o random.exe random.ml File "random.ml", line 4, characters 13-23: >let nombre = Random.int 100;; > ^^^^^^^^^^ The label int is unbound.
Pourrait il y avoir un conflit entre le nom de ton fichier Random.ml et le nom d'une éventuelle bibliothèque comme Random? Pardonne moi je suis débutant j'essais de chercher aussi!
Pareil ^^ !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 D:\FAC\Caml2\PROGCO~1>camlc -o random.exe trouve_nb.ml File "trouve_nb.ml", line 4, characters 13-24: >let nombre = Random__int 100;; > ^^^^^^^^^^^ The value identifier Random__int is unbound.
Salut !
@Soshius> Tu fais du Caml Light : c'est donc random__int, en minuscules et avec 2 underscores.
Cordialement,
Cacophrène
Vous pourriez aussi essayer de lire les manuels d'utilisationPardonne moi je suis débutant j'essais de chercher aussi!
http://caml.inria.fr/pub/docs/manual-caml-light/
http://caml.inria.fr/pub/distrib/cam...cl74refman.pdf
http://caml.inria.fr/pub/distrib/cam...74tutorial.pdf
A la compilation il me trouve toujours cette erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 D:\FAC\Caml2\PROGCO~1>camlc -o random.exe random.ml File "random.ml", line 4, characters 13-24: >let nombre = random__int 100;; > ^^^^^^^^^^^ The value identifier random__int is unbound.
Salut !
@Soshius> Ton fichier s'appelle random.ml...
Cordialement,
Cacophrène
Partager