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
