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 :

<<Exception: Failure "int_of_string" >> !


Sujet :

Caml

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut <<Exception: Failure "int_of_string" >> !
    Bonjour,

    je suis débutant en ocaml et je n'arrive pas à trouver pourquoi j'ai cet erreur quand j'essaie de taper un entier .
    Voici mon code (que j'ai écrit juste pour tester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let main() =
      print_string "Veuillez  entrer  un  nombre : ";
      let x = read_line() in print_int (int_of_string(x));
    ;;
     
    main();;
    et l'affichage que j'ai :

    # val main : unit -> unit = <fun>
    # Veuillez entrer un nombre : 12;;
    Exception: Failure "int_of_string".
    #
    J'ai déjà essayé de trouver une réponse sur les tutoriels d'ocaml mais je n'ai rien trouvé .
    Merci de votre aide .

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 172
    Points
    172
    Par défaut
    L'erreur est que vous avez donné "12;;" comme réponse et pas "12".

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par TchoubiTchoub Voir le message
    L'erreur est que vous avez donné "12;;" comme réponse et pas "12".
    Oui merci c'était bien ca l'erreur
    Mais là j'ai un autre erreur .

    J'ai défini les types suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type utilisateur ={name:string; prenom:string; age:int};;
    type page ={nom:string; admin:compte list};;
     
    type compte =
      |Utilisateur of utilisateur
      |Page of page;;
     
    type graphe = (compte * compte list) list;;
    et j'essaie de créer quelques utilisateurs et pages comme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let u1 =Utilisateur({name="S"; prenom="F"; age=18}) ;;
    let u2 =Utilisateur({name="H"; prenom="M"; age=20});;
    let u3 =Utilisateur({name="L"; prenom="J"; age=21}) ;;
    let l = [u1];;
    let p1 =Page({nom="P"; admin=l});;
    mais j'obients l'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # Characters 32-33:
      let p1 =Page({nom="P"; admin=l});;
                                      ^
    Error: This expression has type compte/12540 list
           but an expression was expected of type compte/12506 list
           Type compte/12540 is not compatible with type compte/12506
    Avez vous une idée pourquoi ??
    Merci d'avance !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par snowflakee Voir le message
    Oui merci c'était bien ca l'erreur
    La moindre des politesses aurait alors été de me dire merci avant d'avoir une autre erreur.
    Citation Envoyé par snowflakee Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    type utilisateur ={name:string; prenom:string; age:int};;
    type page ={nom:string; admin:compte list};;
     
    type compte =
      |Utilisateur of utilisateur
      |Page of page;;
     
    type graphe = (compte * compte list) list;;
     
    let u1 =Utilisateur({name="S"; prenom="F"; age=18}) ;;
    let l = [u1];;
    let p1 =Page({nom="P"; admin=l});;
    mais j'obients l'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # Characters 32-33:
      let p1 =Page({nom="P"; admin=l});;
                                      ^
    Error: This expression has type compte/12540 list
           but an expression was expected of type compte/12506 list
           Type compte/12540 is not compatible with type compte/12506
    Avez vous une idée pourquoi ??
    Merci d'avance !
    Vous avez dû définir un type compte avant. En effet, votre code tel quel ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type utilisateur ={name:string; prenom:string; age:int};;
    type page ={nom:string; admin:compte list};;
    Arrivés ici, quel est ce type compte dans le type page ? Si votre programme compilait bien jusqu'ici, j'en déduis que c'est un type compte que vous avez défini avant. Si vous voulez définir des types mutuellement récursifs, il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type utilisateur ={name:string; prenom:string; age:int};;
    type page ={nom:string; admin:compte list}
    and compte =
      |Utilisateur of utilisateur
      |Page of page;;
    Cordialement

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci de m'avoir répondu . (et je le pense vraiment puisque je n'ai pas d'autre erreur (pas encore au moins ) )
    Au faite , j'ai résolu ce problème en changeant mon typage comme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type compte =
      |Utilisateur of utilisateur
      |Page of page*compte list;;
     
    type utilisateur ={name:string; prenom:string; age:int};;
    type page ={nom:string};;
    et apparamment ca marche !!

    Cordialement .

  6. #6
    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 990
    Points
    2 990
    Par défaut
    et apparemment ça marche !!
    Apparemment seulement.
    La seule bonne façon de faire ce sont des types mutuellement récursifs comme proposé par TchoubiTchoub.
    Sinon on mélange des types différents qui n'ont d'identique que le nom et on s'expose à cette sorte de message que vous avez déjà rencontré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error: This expression has type compte/12540 list
           but an expression was expected of type compte/12506 list
           Type compte/12540 is not compatible with type compte/12506

+ Répondre à la discussion
Cette discussion est résolue.

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