Quick actions

cmd+k|ctrl+k

Navigation

Languages

fibonacci

Snippet info

Language

Perl

Visibility

public

Author

tgraham346

Created

2019-09-13T19:32:23Z

Updated

2019-09-13T19:32:23Z

use v5.20;

sub Y { my $f = shift;
    sub {$f->(Y($f))->(@_)}
}

my $factorial = sub {my $f = shift;
    sub {my $n = shift; $n < 2 ? 1 : $n * $f->($n-1)}
};

my $fibonacci = sub {my $f = shift;
    sub {my $n = shift; $n == 0 ? 0 : $n == 1 ? 1 : $f->($n-1) + $f->($n-2)}
};

sub fibonacci { 
    my $n = shift; 
    $n == 0 ? 0 : $n == 1 ? 1 : __SUB__->($n-1) + __SUB__->($n-2)
}

my $fib = sub { \&fibonacci } ;

say join "\n", map fibonacci($_) , 1..5;
say "==============";
say Y($factorial)->($_) for 1 .. 5;
say "==============";
say Y($fib)->($_) for 1 .. 5;
say "==============\n\n\n";


say "NOW BIG TIME" ;
say "==============\n\n\n";

for my $f ($factorial, $fibonacci, $fib) {
    say join "\n", map Y($f)->($_), 1 .. 20;
}


print "\n", Y( sub{ \&fibonacci } )->($_) for 1 .. 10;
INFO