sub sum{ ( shift()//return 0 ) + &sum }
print sum( 1,2,3);;
6
print sum( 1 .. 100 );;
Deep recursion on subroutine "main::sum" at
5050
####
print Y( sub{my$rec=shift; sub{(shift()//return 0) + &$rec }})->(1 .. 100);;
5050
##
##
sub Y {
my ( $curried_rec ) = @_;
sub {
my ( $f1 ) = @_;
$curried_rec->( sub { $f1->( $f1 )->( @_ ) } )
}->( sub {
my ( $f2 ) = @_;
$curried_rec->( sub { $f2->( $f2 )->( @_ ) } )
} )
}
##
##
C:\test>perl -Mstrict -wE"say eval join'+',()"
C:\test>perl -Mstrict -wE"say eval join'+',0"
0
C:\test>perl -Mstrict -wE"say eval join'+',-1"
-1
C:\test>perl -Mstrict -wE"say eval join'+',-1..+3"
5