hakobe (owner)

Revisions

gist: 64425 Download_button fork
public
Public Clone URL: git://gist.github.com/64425.git
Embed All Files: show embed
cps_fact.pl #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use strict;
use warnings;
use Test::More qw(no_plan);
 
sub fact {
    my ($n, $k) = @_;
    $n == 1 ? $k->(1)
            : fact($n - 1, sub {$k->($n * shift)} );
};
 
map { is($_, 120) } (
    fact(5, sub{ shift }),
    fact(4, sub{ (sub{ shift })->( 5 * shift ) }),
    fact(3, sub{ (sub{ (sub{ shift })->( 5 * shift ) })->(4 * shift) }),
    fact(2, sub{ (sub{ (sub{ (sub{ shift })->( 5 * shift ) })->(4 * shift) })->(3 * shift)}),
    fact(1, sub{ (sub{ (sub{ (sub{ (sub{ shift })->( 5 * shift ) })->(4 * shift) })->(3 * shift)})->(2 * shift) }),
    (sub{ (sub{ (sub{ (sub{ (sub{ shift })->( 5 * shift ) })->(4 * shift) })->(3 * shift)})->(2 * shift) })->(1),
    (sub{ (sub{ (sub{ (sub{ shift })->( 5 * shift ) })->(4 * shift) })->(3 * shift)})->(2 * 1),
    (sub{ (sub{ (sub{ shift })->( 5 * shift ) })->(4 * shift) })->(3 * 2 * 1),
    (sub{ (sub{ shift })->( 5 * shift ) })->(4 * 3 * 2 * 1),
    (sub{ shift })->( 5 * 4 * 3 * 2 * 1),
    ( 5 * 4 * 3 * 2 * 1),
);