Bonjour,
Je voudrais savoir s'il est possible de préciser le pas d'une liste en Perl comme c'est possible en Python et en Haskell.
Merci
Bonjour,
Je voudrais savoir s'il est possible de préciser le pas d'une liste en Perl comme c'est possible en Python et en Haskell.
Merci
Pas sûr de bien comprendre ce que tu veux. Peux-tu donner un exemple de ce que tu cherches à faire.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Un exemple de boucle à porter par exemple![]()
je me risque à une réponse:
en python il est possible de faire:
En Perl je n'ai jamais essayé mais je ne pense pas qu'on puisse le faire direstement (sans passer par une boucle for) ou faire quelque chose comme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 l = range(1, 10) #[1, 2, 3, 4, 5, 6, 7, 8, 9] l[0:5] #[1, 2, 3, 4, 5] l[0:5:2] #[1, 3, 5] => le 3ème éléments étant le "pas" de lecture l[0:5:2] = [11, 13, 15] #l -> [11, 2, 13, 14, 15, 6, 7, 8, 9]
mais ce n'est peut être pas toujours applicable (à réfléchir)
Code : Sélectionner tout - Visualiser dans une fenêtre à part my @result = grep {$_ % 2 == 0} @tableau; # ne récupère que les éléments de @tableau divisible par 2.
Edit: La proposition grep ne correspond pas à ta demande en fait. Je la laisse mais en fait regarde la valeur et non l'indice![]()
Dans les versions récentes de Python, on peut aussi préciser le pas en ajoutant un : supplé-
mentaire et en indiquant le pas par un entier :
en Haskell :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[0:3:2] ['girafe', 'singe']
Et donc je voulais savoir si ce système existe en Perl.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ghci> [2,4..20] [2,4,6,8,10,12,14,16,18,20] ghci> [3,6..20] [3,6,9,12,15,18]
Je ne connais pas d'extension à l'opérateur range permettant de parcourir des tableaux par "pas".
Mais je peux facilement le faire avec map sur l'indice du tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2$ perl -E '$pas = 2; @a=qw(a b c d e f g); say join ",", map $a[$pas*$_], 0 .. @a/$pas-1;' a,c,e
Bonjour,
une solution possible:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3$ perl -E '@a = a..z; say join " ", map $a[$_], grep $_%2==0, 0..$#a;' a c e g i k m o q s u w y
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Bon j'ai résolu mon problème, en fait je pensais tellement à la boucle foreach que j'en ai oublié la boucle for comme en C
du coup pour par exemple avoir un pas de 10 dans une boucle de 0 à 90 je fais comme ça :
j'ai tilté en recherchant "step" sur cette page : http://hyperpolyglot.org/more
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (my $var = 0; $var <= 90; $var+=10) { print "$var\n"; }
merci et désolé![]()
Partager