Funciones de orden superior

Una de las ventajas de disponer de referencias a funciones es que podemos escribir meta-funciones: funciones que reciben funciones como parámetros. Se dice de tales funciones que son funciones de orden superior.

El siguiente ejemplo muestra una función sum que recibe como parámetros de entrada dos referencias a funciones de una variable y devuelve una referencia a la función suma de aquellas.

lhp@nereida:~/Lperl/src$ cat -n readfunction.pl
 1  #!/usr/local/bin/perl5.8.0 -w
 2  use strict;
 3
 4  sub f {
 5    my $x = shift;
 6    2*$x;
 7  }
 8
 9  sub g {
10    my $x = shift;
11    $x*$x;
12  }
13
14  sub sum {
15    my $rf1 = shift;
16    my $rf2 = shift;
17
18    return (sub { my $x = shift;  &$rf1($x)+&$rf2($x); });
19  }
20
21  my $rf = \&f;
22  my $rg = \&g;
23
24  my $s = sum($rf, $rg);
25
26
27  print "Dame un número: ";
28  my $x;
29  chomp($x = <>);
30  print "f($x)+g($x) = ",&$s($x),"\n";
31
32  print "Dame una subrutina anónima ";
33  my $r;
34  chomp($r = <>);
35  $r = eval($r);
36  my $t = sum($r, $s);
37  print "Tu función($x)+f($x)+g($x) = ",&$t($x),"\n";

Sigue un ejemplo de ejecución:

$ ./readfunction.pl
Dame un número: 4
f(4)+g(4) = 24
Dame una subrutina anónima sub { my $x = shift; $x -1; }
Tu función(4)+f(4)+g(4) = 27



Subsecciones
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