IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Petit souci avec Random


Sujet :

Caml

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Petit souci avec Random
    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 ^^

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # let (nb: int) = Random.int(100);;
    val nb : int = 34
    Précises le type de nb!

  3. #3
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Citation Envoyé par BlueJack
    Précises le type de nb!
    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.

    Citation Envoyé par Soshius
    Bonjour, j'ai un souci avec la fonction random de caml

    let nombre = Random.int(100);;
    > ^^^^^^^^^^
    L'étiquette int n'est pas définie.
    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...)

    Remarque en passant : les parenthèses sont inutiles. Random.int 100 va très bien.

    Cordialement,
    Cacophrène

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Petite question à part sur le random. Après ma première réponse visiblement mauvaise qui fut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # let (nb: int) = Random.int(100);;
    val nb : int = 34
    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 = 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...)

    Merci

  5. #5
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Points : 1 412
    Points
    1 412
    Par défaut
    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 ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    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.

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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

    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.
    Mon fichier ressemble a ca :

    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;;

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Remplace ta ligne 4 par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let nombre = Random.int 100;;
    Juste pour voir

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    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!

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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.

  12. #12
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    @Soshius> Tu fais du Caml Light : c'est donc random__int, en minuscules et avec 2 underscores.

    Cordialement,
    Cacophrène

  13. #13
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut rtfm
    Pardonne moi je suis débutant j'essais de chercher aussi!
    Vous pourriez aussi essayer de lire les manuels d'utilisation

    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

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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.

  15. #15
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    @Soshius> Ton fichier s'appelle random.ml...

    Cordialement,
    Cacophrène

Discussions similaires

  1. petit soucis avec mon graveur
    Par Vador dans le forum Périphériques
    Réponses: 8
    Dernier message: 02/11/2005, 15h58
  2. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 11h08
  3. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 23h10
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 14h45
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo