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 :

List to matrice


Sujet :

Caml

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut List to matrice
    Bon soir à tous,


    Je voudrais passer une liste de liste de string dans une matrice, la matrice est définie comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let matriz = Array.make_matrix 10 5 [] ;;
    example :
    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
    - : string list array array =
    [|[|["4"]; ["#"]; ["#"]; ["R"]; ["5"]|];
      [|["1"]; ["B"]; ["B"]; ["R"]; ["4"]|];
      [|["2"]; ["B"]; ["B"]; ["R"]; ["2"]|];
      [|["2"]; ["a"]; ["a"]; ["R"]; ["2"]|];
      [|["2"]; ["b"]; ["B"]; ["L"]; ["3"]|];
      [|["3"]; ["B"]; ["B"]; ["L"]; ["3"]|];
      [|["3"]; ["a"]; ["a"]; ["L"]; ["3"]|];
      [|["3"]; ["A"]; ["A"]; ["R"]; ["1"]|];
      [|["4"]; ["B"]; ["B"]; ["R"]; ["4"]|];
      [|["4"]; ["#"]; ["#"]; ["R"]; ["5"]|]|]
    # lista_instr;;
    - : string list list =
    [["1"; "a"; "A"; "R"; "2"]; ["1"; "B"; "B"; "R"; "4"];
     ["2"; "B"; "B"; "R"; "2"]; ["2"; "a"; "a"; "R"; "2"];
     ["2"; "b"; "B"; "L"; "3"]; ["3"; "B"; "B"; "L"; "3"];
     ["3"; "a"; "a"; "L"; "3"]; ["3"; "A"; "A"; "R"; "1"];
     ["4"; "B"; "B"; "R"; "4"]; ["4"; "#"; "#"; "R"; "5"]]
    Merci.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    La dernière liste de ta liste de liste est ta première ligne de ta matrice ??
    Tu l'as tu écris à la main ça ?

    Il n'est pas de mon habitude de donner des solutions sans preuve d'une réflexion de la part de la personne.
    Est-ce que tu as élaboré un algorithme ?

    Qu'est ce qui te dérange (si on oublie la remarque que j'ai faite précédemment sur l'ordre) ? Parce que c'est quand même un problème très simple surtout si tu t'autorises les fonctions déjà existantes de ocaml dans le module Array et List.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Liste to matrice
    Plutôt ça….
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let rec palavra_to_matrix lista_palavra matrix line col = match lista_palavra with
    		[] -> matrix
    		|el::cauda -> matrix.(line).(col) <- [el]; palavra_to_matrix cauda matrix (line) (col+1);; 
     
    let rec instrucoes_to_matrix lista_instr matrix line = match lista_instr with
            [] -> matrix
    	    |el::cauda1 -> palavra_to_matrix el matrix line 0; instrucoes_to_matrix cauda1 matrix (line+1);;
    Qui de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [["1"; "a"; "A"; "R"; "2"]; ["1"; "B"; "B"; "R"; "4"];
     ["2"; "B"; "B"; "R"; "2"]; ["2"; "a"; "a"; "R"; "2"];
     ["2"; "b"; "B"; "L"; "3"]; ["3"; "B"; "B"; "L"; "3"];
     ["3"; "a"; "a"; "L"; "3"]; ["3"; "A"; "A"; "R"; "1"];
     ["4"; "B"; "B"; "R"; "4"]; ["4"; "#"; "#"; "R"; "5"]]
    Done :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [|[|["1"]; ["a"]; ["A"]; ["R"]; ["2"]|];
      [|["1"]; ["B"]; ["B"]; ["R"]; ["4"]|];
      [|["2"]; ["B"]; ["B"]; ["R"]; ["2"]|];
      [|["2"]; ["a"]; ["a"]; ["R"]; ["2"]|];
      [|["2"]; ["b"]; ["B"]; ["L"]; ["3"]|];
      [|["3"]; ["B"]; ["B"]; ["L"]; ["3"]|];
      [|["3"]; ["a"]; ["a"]; ["L"]; ["3"]|];
      [|["3"]; ["A"]; ["A"]; ["R"]; ["1"]|];
      [|["4"]; ["B"]; ["B"]; ["R"]; ["4"]|];
      [|["4"]; ["#"]; ["#"]; ["R"]; ["5"]|]|]
    Le problème est que après avoir compiler j’ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    F:\Problema E_Vista>ocamlc -o Problema_E.exe "str.cma" Problema_E.ml
    File "Problema_E.ml", line 21, characters 20-54:
    Warning S: this expression should have type unit.
    Dans la function :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec instrucoes_to_matrix lista_instr matrix line = match lista_instr with
            [] -> matrix
    	    |el::cauda1 -> palavra_to_matrix el matrix line 0; instrucoes_to_matrix cauda1 matrix (line+1);;
    Plus précisément cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        |el::cauda1 -> palavra_to_matrix el matrix line 0; instrucoes_to_matrix cauda1 matrix (line+1);;
    Merci.

  4. #4
    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
    Le warning vient du fait que ta première fonction, palavra_to_matrix, fait deux choses différentes : elle modifie la matrice (dans la ligne |el::cauda -> ...), puis renvoie la matrice modifiée ([] -> matrix).

    Quand tu l'utilises dans ta deuxième fonction (palavra_to_matrix el matrix line 0, tu te sers de la modification de la matrice, mais tu ne récupères pas la matrice modifiée. Cela perturbe le compilateur, parce que tu mets un ; au lieu de récupérer la valeur.

    Si tu veux éviter ce warning, modifie ta première fonction pour qu'elle ne renvoie rien : dans le premier cas ([]), renvoie () au lieu de matrix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec palavra_to_matrix lista_palavra matrix line col = match lista_palavra with
                    [] -> ()
                    |el::cauda -> matrix.(line).(col) <- [el]; palavra_to_matrix cauda matrix (line) (col+1);;
    Cependant, ce problème peut se reproduire quand tu voudras utiliser ta deuxième fonction. C'est à toi de voir comment le régler globalement.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Sinon tu as une solution très simple avec Array.to_list et List.map.
    Ça se fait très très vite. C'est pour un devoir ou pour toi ?
    Si c'est pour un devoir, il vaut mieux ne pas les utiliser.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 105
    Points
    105
    Par défaut Merci
    Merci, en fait c’est pour un devoir. Je te remercie pour la solution é plus important, l’explication.

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

Discussions similaires

  1. Extraire des valeurs d'une liste de matrices
    Par ursulinatm dans le forum R
    Réponses: 2
    Dernier message: 11/04/2012, 11h54
  2. Réponses: 2
    Dernier message: 24/01/2012, 16h44
  3. Problème d'usage d'une liste de matrice
    Par emna hakem dans le forum C#
    Réponses: 9
    Dernier message: 09/03/2011, 18h19
  4. Liste des listes de matrice en C#
    Par emna hakem dans le forum Débuter
    Réponses: 11
    Dernier message: 21/01/2011, 09h11

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