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 :

Problèmes de type en Ocaml


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Problèmes de type en Ocaml
    Bonjour,

    J'ai actuellement une structure pour réprésenter des graphes qui est la suivante :

    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
    type couleur = 
        | Vierge
        | Couleur of int;;
     
    type sommet = 
        {id : int;
         mutable couleur : couleur;
         mutable voisins : sommet list};;
     
    type graphe = sommet list;;
     
    let nouveau_sommet () = 
      {id = id_nouveau ();
       couleur = Vierge;
       voisins = []};;
     
    let s1 = nouveau_sommet ();;
    Dans une des mes fonction je récupère sous forme de string le numéro d'un sommet ex : "s1"

    Dans Ocaml je peux faire "s1.couleur <- Couleur(2);;" mais lorsque je l'execute dans mon programme, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    This expression has type string but is here used with type sommet
    Comment est-ce que je peux convertir mon String en mon type Sommet ?

    Clément.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Si je comprends bien ton problème (et je ne suis pas sûr du tout que ce soit le cas), tu voudrais retrouver une variable de ton programme, lors de l'exécution, par son nom (ce qui n'a rien à voir avec le polymorphisme).
    La réponse courte est "c'est impossible".
    La réponse un peu moins courte est: le nom des variables dans le programe initiale disparait lors de la compilation. Une fois que tout est linké et près à exécuter, les programmes
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let salut_les_enfants_comment_ca_va = 3
    seront compilé de façons rigoureusement identiques. Donc aucun moyen de lier "x" à la variable x, puisque ça pourrait être la variable salut_les_enfants_comment_ca_va.

    Maintenant, comment faire ce que tu veux ? En utilisant une table de hash. Quand tu crée un noeud "s1", tu peux l'ajouter dans une table de hash:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let all_the_nodes: (string, node) Hashtbl.t = Hashtbl.create 42
     
    let add_node name node = Hashtbl.add all_the_nodes name node
     
    let get_node name = Hashtbl.find all_the_nodes name
    Have fun

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse. En effet ce n'est pas du polymorphisme, je me suis égaré sur ce coup la.

    Sinon, je pense que tu as bien compris mon problème et ton explication m'a permis de comprendre pourquoi c'est impossible.

    Je vais creuser du côté de la table de hash, mais je n'ai jamais vu ca. Si tu pouvais m'expliquer les grandes lignes, et comment ca fonctionne (un lien vers un tuto que tu trouves bien fait ou autre, m'irait très bien.)

    Je te tiens au courant.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Citation Envoyé par clement1010 Voir le message
    Je vais creuser du côté de la table de hash, mais je n'ai jamais vu ca. Si tu pouvais m'expliquer les grandes lignes, et comment ca fonctionne (un lien vers un tuto que tu trouves bien fait ou autre, m'irait très bien.)
    En gros une table de hash de type ('key, 'content) Hashtbl.t, c'est un objet qui associe des objet de type 'key à des objets de types 'content (j'utilise "objet" pour "truc" ou "valeur", pas pour objet dans le sens de la programmation orienté objet).

    La documentation est là: http://caml.inria.fr/pub/docs/manual...f/Hashtbl.html

    Pour ton usage, tout ce dont tu as besoin, je dirais que c'est create, add, find et remove.
    Pour create, prends un nombre premier pas trop grand (97 fait l'affaire par exemple).
    Après, add et find et remove, je pense que c'est assez simple, une fois que tu as décodé leur type(*):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    val add : ('key, 'value) t -> 'key -> 'value -> unit
    val find : ('key, 'value) t -> 'key -> 'value
    val mem : ('key, 'value) t -> 'key -> bool
    val remove : ('key, 'value) t -> 'key -> unit
    Après, si tu es curieux (et j'espère que tu l'es ), tu trouveras plus d'infos sur les tables de hash en générales (comment ça marche en interne) par exemple dans le Cormen, ou sans doute sur wikipedia



    (*)pour ceux que ça intéresse, OCaml a enfin été patché pour les variables de types gardent leurs noms, à la fois pour ocamlc -i, les messages d'erreurs et normalement ocamldoc ! RDV à la prochaine release je pense

Discussions similaires

  1. Problème de type avec fonction OCAML
    Par chrislains dans le forum Caml
    Réponses: 1
    Dernier message: 12/05/2013, 15h44
  2. [OCaml] problème de types
    Par Miss1987 dans le forum Caml
    Réponses: 6
    Dernier message: 29/10/2007, 21h05
  3. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04

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