next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Práctica: Emulación de un Sup: Referencias Ant: Referencias a subrutinas anónimas Err: Si hallas una errata ...

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.

#!/usr/local/bin/perl5.8.0 -w

use strict;

use Set::Scalar;

sub f {
  my $x = shift;
  2*$x;
}

sub g {
  my $x = shift;
  $x*$x;
}

sub sum {
  my $rf1 = shift;
  my $rf2 = shift;

  return (sub { my $x = shift;  &$rf1($x)+&$rf2($x); });
}

my $rf = \&f;
my $rg = \&g;

my $s = sum($rf, $rg);


print "Dame un número: ";
my $x;
chomp($x = <>);
print "f($x)+g($x) = ",&$s($x),"\n";

print "Dame una subrutina anónima ";
my $r;
chomp($r = <>);
$r = eval($r);
my $t = sum($r, $s);
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
next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Práctica: Emulación de un Sup: Referencias Ant: Referencias a subrutinas anónimas Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21