error message Deep recursion on subroutine

N

NamSa

my code printing error message this <data> 6 line it's TIME function.
TIME function is recursive computations .
Deep recursion on subroutine "main::Value" at toy.pl line 104, <DATA>
line 6.
Deep recursion on subroutine "main::Fun" at toy.pl line 40, <DATA>
line 6.
Deep recursion on subroutine "main::Fun" at toy.pl line 40, <DATA>
line 6.
Deep recursion on subroutine "main::Subst" at toy.pl line 62, <DATA>
line 6.



my code Lisp-Like TOY Language
base function 2 function it's MINUS and IF. another function make is
base IF or MINUS

use strict;

use warnings;



my @fun_list = ("MINUS","IF");

my %fun_hash = (

MINUS => 'Minus',

IF=> 'If',

AA=> '(x y)(IF x y)',

BB=> '(x y)(MINUS x y)',

ADD=> '(x y)(MINUS x (MINUS 0 y))',

EQUAL=> '(v2 v3)(MINUS (MINUS 1 (IF ( MINUS v2 v3) 1)) (IF (MINUS
v3 v2) 1))',

"IF/THEN/ELSE"=> '(v7 v8 v9)(ADD (IF v7 v8) (IF (MINUS 1 v7) v9))'

);



#main

while (<DATA>){

print Value($_) ;



}



sub Value{

my $exp=$_[0];

my $result;

while($exp !~ /^-?\d+/){

if (my @array = $exp =~ /\(\s*((?:(?!\s+\))[^()])+)\s*\)/xg){

for (@array){

$result = Fun($_);

$exp =~ s/\(\s*$_\s*\)/$result/;

}

}

}

return $exp;

}





sub Fun{

my $exp = $_[0];

my @arg = split / /,$exp;

for my $key (keys %fun_hash){

if( $exp =~ /^$key/){

if($key eq "MINUS"){

return Minus($arg[1],$arg[2]);

}elsif($key eq "IF"){

return If($arg[1],$arg[2]);

}else{

return Subst($key,$exp);

}

}

}

}



sub Minus{

my $x = $_[0];

my $y = $_[1];

return $x-$y;

}





sub If{

my $x = $_[0];

my $y = $_[1];

if($x <= 0){

return 0;

}else{

return $y;

}

}



sub Subst{

my $key = $_[0];

my $exp = $_[1];

my $i=0;

my @arg = split / /,$exp;

my $fun = $fun_hash{$key};

my @ar = $fun=~ /\(\s*((?:(?!\s+\))[^()])+)\s*\)/xg;

my @arg2 = split / /,$ar[0];

my $arg_size = @arg2;

$fun =~ s/\(\s*$ar[0]\s*\)//g;

for (@arg2){

$fun =~ s/$_/$arg[$i+1]/g;

$i++;

}

return Value($fun);

}



__DATA__

(AA 0 5 )

(BB 0 5 )

(ADD 5 5 )

(EQUAL 6 5 )

(IF/THEN/ELSE 1 2 5)
 
P

Peter J. Holzer

my code printing error message this <data> 6 line it's TIME function.
TIME function is recursive computations .
Deep recursion on subroutine "main::Value" at toy.pl line 104, <DATA>
line 6.

This is not an error message, just a warning. You can turn it off with
"no warnings 'recursion';". See perldoc warn, perldoc perllexwarn and
perldoc perldiag for details.

hp
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,012
Latest member
RoxanneDzm

Latest Threads

Top