[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