Bonjour,
J'essaye de retrouver dans un tableau de point (objet Moose), le point le plus à gauche.
Le "reduce" fonctionne bien, mais comme parfois je cherche le point le plus à droite, ou ceci ou cela, je me disais que je pourrais créer un fonction min_o (o pour objet), ou je passe en fonction anonyme le critère de recherche du minima, dans mon cas, la réel $_->x, mais ça pourrait être un calcul plus compliqué qui renvoie un réel.
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
19
20
21
22
23 #Point.pm use v5.10; package Point; use Moose; has 'x', is => 'rw', required => 1; has 'y', is => 'rw', required => 1; return 1; #!/usr/bin/perl use v5.10; use Point; use Data::Dumper; use List::Util qw(first max maxstr min minstr reduce shuffle sum); sub min_o (&@){ my $code_ref = shift; return reduce {$code_ref->($a) < $code_ref->($b) ? $a : $b} @_; } my @pts; push(@pts,Point->new(x=>1,y=>1),Point->new(x=>0,y=>0)); say Dumper reduce {$a->x < $b->x ? $a : $b} @pts; say Dumper min_o {$_->x} @pts;
Cela permettrait d'écrire à chaque fois
mais ça ne marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part min_o {fonction_renvoyant_un_réel} @pts
Bon, je débute dans les fonctions anonymes et je me suis inspiré (un grand merci) des 3 articles "La programmation fonctionnelle en Perl"
une idée ?
Partager