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é![]()
Il est assez rare en perl d'avoir besoin de travailler sur des indices de tableau, étant donné que les fonctions/opérateurs de liste sont souvent bien plus pratiques. Si c'est le cas d'usage que vous envisagez, il y a peut-être des solutions plus "perlish". A vous de voir si vous souhaitez en discuter en élargissant votre question.
ça m'intéresserais de connaître des techniques plus "perlish" effectivement oui.
Pour cela, il faudrait que tu élargisses le champs de ta question, en expliquant par exemple ce que tu veux faire de cet "indice" utilisé par "pas" (dans quel algorithme il s'insère).
Tu peux déjà essayer ceci:
OU:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 perl -E 'say map $_ * 10, 0..9;' 0 10 20 30 40 50 60 70 80 90
si, comme moi, tu as sur certaines plateformes une version trop ancienne de Perl pour avoir la fonction say.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2perl -e 'print map { $_ * 10 , "\n" } 0..9;'
Ou un autre exemple utilisant une "tranche" de tableau:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $perl -e 'my @months = qw /jan fev mar apr may jun jul aug sep oct nov dec/; print join "\n", @months[map $_ * 2 , 0..5];' jan mar may jul sep nov
- 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
Partager