[caracas-pm] Divertimento
Ernesto Hernández-Novich
emhnemhn at gmail.com
Thu Dec 16 08:15:05 PST 2010
¿Qué calculan wtf y wtffff? ¿Qué calculan hell y hellll? ¿Por qué las
segundas versiones son más eficientes que las primeras?
Suerte haciendo trampa con el debugger...
#!/usr/bin/perl
use strict;
use warnings;
use feature qw(say);
# Aquello que le falta a HTML para ser lenguaje de programación.
sub way {
my $f = shift;
sub { $f->(way($f))->(@_) };
}
# Es esa función, escrita de aquella manera.
sub wtf {
way( sub {
my $r = shift;
sub { my $n = shift; ($n < 2) ? 1 : $n * $r->($n-1) }
}
)->(shift);
}
# La misma anterior, pero con aquello de cola con acumulador.
sub wtffff {
way( sub {
my $r = shift;
sub { my ($n,$a) = @_; $n ? $r->($n-1,$a*$n) : $a }
}
)->(shift,1);
}
# La otra función, escrita de aquella manera
sub hell {
way( sub {
my $r = shift;
sub { my $n = shift; ($n < 2) ? 1 : $r->($n-1) + $r->($n - 2) }
}
)->(shift);
}
# La otra función, pero con aquello de cola y entuplado.
sub hellll {
way( sub {
my $r = shift;
sub { my ($n,$a,$b) = @_; ($n < 2) ? $b : $r->($n-1,$b,$a+$b) }
}
)->(shift,1,1);
}
say wtf( 4 );
say wtffff( 4 );
say hell( 5 );
say hellll( 5 );
Por cierto, el término técnico es reificación de "aquello".
--
Ernesto Hernández-Novich - @iamemhn - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't aptitude it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
More information about the caracas-pm
mailing list