$x+$y
es una función de dos argumentos ($x, $y)
,
pero puede verse también como una función de un argumento $x
. ¿Cómo?.
La clave esta en pensar en la función suma como una función
que cuando recibe el primer argumento
$x
devuelve como resultado una función sub { $x+$_[0] }
la cual suma a su argumento el primer argumento $x
.
curry
, la cual currifica
una función de mas de un argumento.
Escriba el código que falta en las líneas
6-8. ¿Donde se esta haciendo uso del concepto
de clausura aqui? ¿Que salidas producen las líneas 20-23?
Teniendo en cuenta que $tu9
es un puntero
a una función,
¿no se puede reescribir la línea 18 como my $tu9_7 = curry $tu9, 7
?
$ cat -n currying.pl 1 #!/usr/bin/perl -w 2 use strict; 3 4 sub curry(&$) { 5 # Rellene los contenidos 6 7 8 9 } 10 11 sub times { $_[0]*$_[1] } 12 sub tutu {$_[0]+$_[1]*$_[2] } 13 14 my $p4 = curry { $_[0]+$_[1] } 4; 15 my $t5 = curry { $_[0]*$_[1] } 5; 16 my $t6 = curry \×, 6; 17 my $tu9 = curry \&tutu, 9; 18 my $tu9_7 = curry \&$tu9, 7; 19 20 print $p4->(8),"\n"; 21 print $t5->(2),"\n"; 22 print $t6->(3),"\n"; 23 print $tu9_7->(5),"\n";