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 :

pointer une matrice


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 16
    Points
    16
    Par défaut pointer une matrice
    Bonjour, j'ai un problème avec des listes de matrices.
    Voici le code (simplifié):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let creerListe () = 
      let mat = [|0|] and liste = ref [] in
    for i = 0 to 5 do
      mat.(0) <- i; liste := mat :: !liste
    done;
    !liste;;
    qui renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[|5|];[|5|];[|5|];[|5|];[|5|]]
    au lieu de d'une liste croissante.
    Je crois que ça à quelque chose à voir avec le fait que je pointe toujours la même matrice. J'ai essayé d'y palier en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 0 to 5 do
      mat.(0) <- i; liste := (Array.copy mat) :: !liste
    done;
    mais ça ne change rien...

    Quelqu'un aurait-il une parade ? Merci beaucoup !!

  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
    Salut !

    Ton code gagnerait en clarté s'il était simplifié et débarrassé de ses références et effets de bord. Regarde par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let creer_matrice n =
      let rec loop i =
        if i = n then []
        else [| i |] :: loop (i + 1)
      in loop 0
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # creer_matrice 10;;
    - : int array list =
    [[|0|]; [|1|]; [|2|]; [|3|]; [|4|]; [|5|]; [|6|]; [|7|]; [|8|]; [|9|]]
    N'hésite pas à me poser des questions si tu veux plus d'explication sur cette fonction. Un petit exercice qui saute aux yeux avec ce code : le rendre tail-rec.

    Cordialement,
    Cacophrène

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    merci de ta réponse Cacophrene.
    J'ai compris ; en fait j'essayais absolument de caser une matrice "de référence", mais ce que tu proposes est bien plus simple en effet

    par contre, je ne sais pas ce que c'est que le tail-rec. Qu'entends tu par là ? Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let rec creerMatrice = function
       | 0 -> []
       | n -> (creerMatrice (n-1)) @ [|n|];;
    Cordialement,

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861

Discussions similaires

  1. probleme sur pointer d'une matrice 3D
    Par djaval0221 dans le forum C++
    Réponses: 2
    Dernier message: 26/05/2008, 20h39
  2. pour pointer une matrice
    Par kikisens dans le forum C++
    Réponses: 8
    Dernier message: 24/10/2006, 18h45
  3. [JTable] remplir avec une matrice
    Par ybdz dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2004, 21h03
  4. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

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