update:can use recursion in block def

This commit is contained in:
Valk Richard Li 2019-11-19 13:12:54 +08:00 committed by GitHub
parent a2a6ca2f58
commit 94a1359aa2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 26 deletions

View File

@ -892,11 +892,6 @@ int abstract_syntax_tree::run_block()
++j;
if(j!=i->children.end())
new_var=j->calculation();
if(new_var.get_type()==__var_function)
{
exit_type=__bad_definition;
std::cout<<">>[Runtime-error] line "<<line<<": cannot declare a function in any blocks."<<std::endl;
}
new_var.set_name(_name);
scope.add_new_var(new_var);
}

View File

@ -175,7 +175,6 @@ enum runtime_error_type
__find_var_failure,
__error_value_type,
__error_command_use,
__bad_definition,
__sigfpe_arithmetic_exception,
__sigsegv_segmentation_error,
__terminal_interrupt,
@ -193,7 +192,6 @@ void print_exit_type(int type)
case __find_var_failure: context="find_var_failure";break;
case __error_value_type: context="value_type_error";break;
case __error_command_use: context="command_use_error(continue/break/return)";break;
case __bad_definition: context="bad_definition(func in block)";break;
case __sigfpe_arithmetic_exception: context="SIGFPE_arithmetic_exception";break;
case __sigsegv_segmentation_error: context="SIGSEGV_segmentation_error";break;
case __terminal_interrupt: context="interrupt";break;

View File

@ -8,15 +8,14 @@ var abs=func(__x)
else{return -__x;}
};
var __balloon_lib_ln_asr=func(__x,__y)
{
if(abs(__y-__x)<=0.1){return (1/__x+8/(__x+__y)+1/__y)*(__y-__x)/6;}
var __mid=(__x+__y)/2;
return __balloon_lib_ln_asr(__x,__mid)+__balloon_lib_ln_asr(__mid,__y);
};
var ln=func(_x)
{
var __balloon_lib_ln_asr=func(__x,__y)
{
if(abs(__y-__x)<=0.1){return (1/__x+8/(__x+__y)+1/__y)*(__y-__x)/6;}
var __mid=(__x+__y)/2;
return __balloon_lib_ln_asr(__x,__mid)+__balloon_lib_ln_asr(__mid,__y);
};
return __balloon_lib_ln_asr(1,_x);
};
@ -113,20 +112,19 @@ var sqrt=func(__x)
return t;
};
var __balloon_lib_asin_asr=func(__x,__y)
var asin=func(_x)
{
var __mid=(__x+__y)/2;
if(abs(__y-__x)<=0.01){return (1/sqrt(1-__x*__x)+4/sqrt(1-__mid*__mid)+1/sqrt(1-__y*__y))*(__y-__x)/6;}
return __balloon_lib_asin_asr(__x,__mid)+__balloon_lib_asin_asr(__mid,__y);
};
var asin=func(__x)
{
if(abs(__x)>1){return -1;}
var __balloon_lib_asin_asr=func(__x,__y)
{
var __mid=(__x+__y)/2;
if(abs(__y-__x)<=0.01){return (1/sqrt(1-__x*__x)+4/sqrt(1-__mid*__mid)+1/sqrt(1-__y*__y))*(__y-__x)/6;}
return __balloon_lib_asin_asr(__x,__mid)+__balloon_lib_asin_asr(__mid,__y);
};
if(abs(_x)>1){return -1;}
var fl=1;
if(__x<0){fl=-fl;__x=-__x;}
if(abs(__x-1)<0.001){return pi/2;}
return fl*__balloon_lib_asin_asr(0,__x);
if(_x<0){fl=-fl;_x=-_x;}
if(abs(_x-1)<0.001){return pi/2;}
return fl*__balloon_lib_asin_asr(0,_x);
};
var acos=func(__x)