Veamos otro ejemplo de currificación. La función map
es una función de dos argumentos: el primero es código
y el segundo una lista. La función retorna una lista.
Matemáticamente:
donde denota las funciones de en y denota las listas de objetos de tipo .
Si la currificamos la convertiremos en una función de un sólo argumento que retorna funciones:
Ası pues - para una función dada - es una función que actúa sobre una lista y retorna una lista. Podríamos usarla como sigue:
lhp@nereida:~/Lperl/src/hop/Chap7$ sed -ne '11,$p' cmap2.pl | cat -n 1 my $sizes = cmap { -s $_ }; 2 my $rand20 = cmap { int(rand(20)) }; 3 local $a = 0; 4 my $pref = cmap { $_ += $a; $a = $_ }; 5 6 my @s = $sizes->(@ARGV); 7 my @r = $rand20->(1..5); 8 my @p = $pref->(1..5); 9 10 print "Tamaños = @s\n"; 11 print "Aleatorio = @r\n"; 12 print "Suma de prefijos = @p\n";que al ejecutra resulta en:
lhp@nereida:~/Lperl/src/hop/Chap7$ cmap2.pl *.pm Tamaños = 650 1933 591 1713 Aleatorio = 18 11 1 8 12 Suma de prefijos = 1 3 6 10 15Veamos una implementación:
lhp@nereida:~/Lperl/src/hop/Chap7$ sed -ne '1,9p' cmap2.pl | cat -n 1 #!/usr/bin/perl -w 2 use strict; 3 4 sub cmap (&) { 5 my $f = shift; 6 return sub { 7 map { $f->($_) } @_ 8 }; 9 }
Casiano Rodríguez León