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ème de type


Sujet :

Caml

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème de type
    Bonsoir, j'ai un petit problème avec cette fonction en caml light (où l et t sont censés être de type (string*int)list et string vect) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #let rec hachage_lineaire_aux l t = match l with
    	| [] -> t
    	| (s,i)::q -> let j = ref (i-1) in
    				while t.(!j) <> "" do
    					if !j < ((vect_length t)-1) then j := !j + 1
    					else j := 0 ; done;
    				t.(!j)<-s ,
    			hachage_lineaire_aux q t ;;
    Entrée interactive:
    >.................s ,
    >        hachage_lineaire_aux q t...
    Cette expression est de type 'a * 'b,
    mais est utilisée avec le type string.
    Pourriez-vous m'expliquer comment caml fait pour interpréter ceci et/ou me donner une solution, s'il vous plaît ?

  2. #2
    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
    Bonjour,

    L'erreur est ici triviale mais ce n'est pas toujours facile à voir quand on regarde le code depuis un bon moment à la recherche d'une satanée erreur... simplement à cause d'une virgule (voir la ligne en rouge dans le code ci-dessous) !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let rec hachage_lineaire_aux l t = match l with
        | [] -> t
        | (s,i)::q -> let j = ref (i-1) in
                    while t.(!j) <> "" do
                        if !j < ((vect_length t)-1) then j := !j + 1
                        else j := 0 ; done;
                    t.(!j)<-s ,
                hachage_lineaire_aux q t ;;
    Une autre question, maintenant, qui me vient en regardant ton code : tu utilises une boucle while. Qu'est-ce qui garantit que ta fonction ne va pas boucler indéfiniment parce que tous les éléments de ton tableau contiennent déjà une chaîne de longueur non nulle ?

    Cordialement,
    Cacophrène

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, j'avais complètement zappé cette virgule. Sinon, pour te répondre je définissais le tableau en fonction de la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let hachage_lineaire l = hachage_lineaire_aux l (make_vect (list_length l) "") ;;

  4. #4
    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
    Citation Envoyé par Super Payet
    Sinon, pour te répondre je définissais le tableau en fonction de la liste
    D'accord.

    Ce code étant hors contexte, il m'est difficile de savoir ce qui se passe vraiment, et ce n'est pas le sujet de la discussion, mais à tout hasard je préfère te signaler ceci : attention aux valeurs prises par la variable i dans les couples (s, i), car le tout premier test à l'entrée dans la boucle while déclenchera une erreur si i > List.length l, car alors j est initialisé avec la valeur List.length l... et t.(List.length l) n'existe pas !

    Cordialement,
    Cacophrène

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

Discussions similaires

  1. [ tinyint et char ] problème de type
    Par shirya dans le forum Installation
    Réponses: 3
    Dernier message: 05/11/2005, 07h08
  2. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  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