Calculando el Máximo de Forma Genérica

Rellene las zonas de puntos en el esqueleto de programa que figura a continuación. La función max deberá calcular el máximo o el mínimo de los elementos de una lista. El primer argumento de la función es una cadena conteniendo el operador de comparación a usar (por ejemplo < o > o gt o lt). Utilizamos la función eval la cuál recibe una cadena y evalúa la expresión Perl que representa.

~/perltesting/lhp$ cat -n max2.pl 
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use List::Util qw{reduce};
 4  
 5  sub max {
 6    my $op = (shift || "<");
 7  
 8    die "Error. Bad comparison operator '$op'\n" unless $op =~ m{([<>])|(gt)|(lt)};
 9  
10    return undef unless @_;
11  
12    my $comparison = '$a '.$op.' $b ';
13  
14    no warnings 'once';
15    return reduce { eval $comparison ? $b : $a } @_;
16  }
17  
18  my $m1 = max("<", 5, 4, 9, 1, 0);
19  my $m2 = max(">",-1, -5, 0, 13, 12, 7);
20  my $m3 = max("lt",-1, "b", 0, 13, 12, 7, "a");
21  my $m4 = max("gt",-1, "b", 0, 13, 12, 7, "a");
22  my $m5 = max();
23  
24  print "$m1, $m2, $m3, $m4\n";
25  
26  print "$m5\n" if defined($m5);
Sigue un ejemplo de ejecución:
~/perltesting/lhp$ perl5.10.0 max2.pl 
9, -5, b, -1
~/perltesting/lhp$

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19