problème d'if

problème d'if - Perl - Programmation

Marsh Posté le 07-11-2006 à 18:55:01    

Alors j'ai un petit souci... Grosso modo j'ai des liste du genre S(SN(DET,ADJ,NOM),SV(V)), le but étant de présenter les listes avec un retrait correspondant à l'imbrication. Donc aucun souci pour décomposer en fonction des parenthèses et virgules, mais j'ai un petit soucis à la fin pour définir le retrait... Je vous montre le code :
 

Code :
  1. for ($x=0;$x<$#tab;$x++) {
  2. for ($i=0;$i<$retrait;$i++) {print ' ';}
  3. $plop=chop(@tab[$x]);
  4. if($plop == "," ) {print "$plop virgule \n";}
  5. if($plop == "(" ) {$retrait=$retrait+5; }
  6. if($plop == ')') {$retrait=$retrait-5;}
  7. }


 
Si je demande d'afficher le tableau préalablement, j'ai un tableau correctement décomposé ([0]-> S( [1]->SN( [3]-> DET, etc.). Et donc j'essaie de vérifier le dernier caractère de chaque élément du tableau, pour vérifier s'il y a lieu d'augmenter ou de réduire le retrait. Or voilà le résultat :
 

Code :
  1. ( virgule
  2. ( virgule
  3. , virgule
  4. , virgule
  5. ) virgule
  6. , virgule
  7. ( virgule


 
 
Donc il vérifie la première condition à chaque fois (et après test c'est la même chose avec les deux autres conditions). Donc si quelqu'un peut me dire où j'ai fait une erreur, je lui en serai reconnaissant.


Message édité par Yagmoth le 07-11-2006 à 18:55:44
Reply

Marsh Posté le 07-11-2006 à 18:55:01   

Reply

Marsh Posté le 07-11-2006 à 19:03:07    

l'opérateur de comparaison de chaine en perl c'est "eq" et non "=="
 
Mais par ailleurs, il me semble que tu te compliques bien la vie et qu'une petite fonction récursive aurrait fait ça très bien... Voir même un coup de Dumper!

Reply

Marsh Posté le 07-11-2006 à 19:22:04    

quelle andouille :D
 
Merci bien ;) Est ce que tu pourrais m'expliquer grosso modo ce qu'est une fonction récursive ? (je débute en perl, donc je ne connait pas trop les fonctions de référence pour le moment...).

Reply

Marsh Posté le 08-11-2006 à 09:40:05    

C'est pas vraiment spécifique à perl, la récursivité. C'est "un concept" algorithmique.  
Definition de wikipedia:

Citation :

une fonction récursive est une fonction, au sens informatique de ce terme, qui peut s'appeler elle-même au cours de son exécution.


C'est généralement très utilisé dans les parcours de tableaux( de tableaux de tableaux) ou d'arbre.
 
Pour ton truc ( si j'ai tout bien compris ce que tu veux), en gros ça donnerait un truc comme ça:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. my @example = (
  4.     1,
  5.     ['1.1','1.2','1.3',['1.3.1','1.3.2','1.3.3']],
  6.     2,
  7.     ['2.1',['2.1.1','2.1.2','2.1.3'],'2.2'],
  8.     3,
  9.     ['3.1',['3.1.1','3.1.2'],'3.2',['3.2.1','3.2.2']]
  10. );
  11. printArray(\@example);
  12. sub printArray {
  13.   my $prm = shift;
  14.   my $inc = shift||'';
  15.   if ( ref $prm eq 'ARRAY'){
  16.     foreach(@$prm){
  17.       printArray($_,$inc."  " );
  18.     }
  19.   } elsif ( ref $prm ne 'HASH'){
  20.     print $inc.$prm,"\n";
  21.   }
  22. }

Reply

Marsh Posté le 08-11-2006 à 12:22:26    

Merci bien je vais jeter un oeil la dessus dès que j'en aurai le temps ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed