Add all the A tasks

This commit is contained in:
Ingy döt Net 2013-04-10 14:58:50 -07:00
parent 2dd7375f96
commit 051504d65b
1608 changed files with 18584 additions and 0 deletions

View file

@ -0,0 +1,14 @@
sub recur (&@) {
my $f = shift;
local *recurse = $f;
$f->(@_);
}
sub fibo {
my $n = shift;
$n < 0 and die 'Negative argument';
recur {
my $m = shift;
$m < 3 ? 1 : recurse($m - 1) + recurse($m - 2);
} $n;
}

View file

@ -0,0 +1,13 @@
sub fib {
my ($n) = @_;
die "negative arg $n" if $n < 0;
# put anon sub on stack and do a magic goto to it
@_ = ($n, sub {
my ($n, $f) = @_;
# anon sub recurs with the sub ref on stack
$n < 2 ? $n : $f->($n - 1, $f) + $f->($n - 2, $f)
});
goto $_[1];
}
print(fib($_), " ") for (0 .. 10);

View file

@ -0,0 +1,6 @@
sub fibo {
my $n = shift;
$n < 0 and die 'Negative argument';
no strict 'refs';
$n < 3 ? 1 : (caller(0))[3]->($n - 1) + (caller(0))[3]->($n - 2);
}

View file

@ -0,0 +1,5 @@
use v5.16;
say sub {
my $n = shift;
$n < 2 ? $n : __SUB__->($n-2) + __SUB__->($n-1)
}->($_) for 0..10