|
69 | 69 |
|
70 | 70 | %self_eval0(X):- var(X),!,fail. |
71 | 71 | self_eval0(X):- \+ callable(X),!. |
72 | | -self_eval0(X):- is_list(X),maplist(var,X),!. |
73 | 72 | self_eval0(X):- is_valid_nb_state(X),!. |
74 | 73 | %self_eval0(X):- string(X),!. |
75 | 74 | %self_eval0(X):- number(X),!. |
|
301 | 300 |
|
302 | 301 | eval_args(Eq,RetType,Depth,Self,X,Y):- atom(Eq), ( Eq \== ('='), Eq \== ('match')) ,!, |
303 | 302 | call(call,Eq,'=',RetType,Depth,Self,X,Y). |
| 303 | + |
| 304 | +eval_args(_Eq,_RetType,_Dpth,_Slf,X,Y):- self_eval(X),!,Y=X. |
304 | 305 | eval_args(Eq,RetType,Depth,Self,X,Y):- |
305 | 306 | eval_00(Eq,RetType,Depth,Self,X,Y). |
306 | 307 | %eval_ret(Eq,RetType,1000,Self,X,Y):- !, |
|
355 | 356 | if_t((Depth<1, trace_on_overflow), debug(metta(e))), |
356 | 357 |
|
357 | 358 | trace_eval(eval_10(Eq,RetType),e,Depth2,Self,X,M), |
358 | | - %ignore(find_term_cycles(M)), |
| 359 | + |
359 | 360 | ((M=@=XX;M==X;M=@=X) -> Y=M ; eval_03(Eq,RetType,Depth2,Self,M,Y)). |
360 | 361 |
|
361 | 362 | %eval_03(_Eq,RetType,_Depth2,_Self,M,Y):- RetType=='Atom',!,M=Y. |
362 | | - |
363 | | -%eval_03(_Eq,_RetType,_Dpth,_Self,X,Y):- check_term_depth(X,Y),!. |
364 | | -eval_03(_Eq,_RetType,_Dpth,_Slf,X,Y):- self_eval(X),!,Y=X. |
365 | | - |
366 | 363 | eval_03(Eq,RetType,Depth2,Self,M,Y):- eval_01(Eq,RetType,Depth2,Self,M,Y). |
367 | 364 |
|
368 | 365 | eval_02(Eq,RetType,Depth,Self,Y,YO):- var(Y),!,YO=Y,var_pass(Eq,RetType,Depth,Self,Y). |
|
609 | 606 | is_list(Args),!, |
610 | 607 | Y=[Fn|RArgs], mapl_eval_args(Eq,RetType,Depth,Self,Args,RArgs). |
611 | 608 |
|
612 | | - |
613 | | -% DMILES @ TODO make sure this isnt an implicit curry |
614 | | -eval_10(Eq,RetType,Depth,Self,[V|VI],[V|VO]):- V==':',is_list(VI),!, |
615 | | - mapl_eval_args(Eq,RetType,Depth,Self,VI,VO). |
616 | | -eval_10(Eq,RetType,Depth,Self,[V|VI],VO):- is_list(V),V=[HV,_,_],HV==':',is_list(VI),!, |
617 | | - mapl_eval_args(Eq,RetType,Depth,Self,[V|VI],VO). |
618 | | - |
619 | 609 | eval_10(Eq,RetType,Depth,Self,[Sym|Args],Y):- \+ atom(Sym), !, |
620 | 610 | maplist(as_prolog_x(Depth,Self), [Sym|Args] , [ASym|Adjusted]), |
621 | 611 | eval_20(Eq,RetType,Depth,Self, [ASym|Adjusted], Y),sanity_check_eval(eval_20_not_atom,Y). |
|
818 | 808 | ((eval_args(Eq,_FRype,Depth,Self,V,VV), V\=@=VV)*-> true; VV = V), |
819 | 809 | eval_args(Eq,RetType,Depth,Self,[VV|VI],VO). |
820 | 810 |
|
821 | | - |
822 | | -% DMILES @ TODO make sure this isnt an implicit curry |
823 | | -eval_20(Eq,RetType,Depth,Self,[V|VI],VO):- is_list(V),V=[HV,_,_],HV==':',is_list(VI),!, |
824 | | - mapl_eval_args(Eq,RetType,Depth,Self,[V|VI],VO). |
825 | | - |
826 | 811 | % DMILES @ TODO make sure this isnt an implicit curry |
827 | 812 | eval_20(Eq,RetType,Depth,Self,[V|VI],VO):- \+ callable(V), is_list(VI),!, |
828 | 813 | mapl_eval_args(Eq,RetType,Depth,Self,[V|VI],VO). |
|
1029 | 1014 |
|
1030 | 1015 |
|
1031 | 1016 | eval_until_eq(_Flags, Eq, XType, YType,_Dpth,_Slf,X,Y,TF):- X==Y,!,check_returnval(Eq,XType,X),check_returnval(Eq,YType,Y),TF='True'. |
1032 | | -eval_until_eq(_Flags, Eq, XType, YType,_Dpth,_Slf,X,Y,TF):- X=@=Y,!,check_returnval(Eq,XType,X),check_returnval(Eq,YType,Y),TF='True'. |
1033 | 1017 | eval_until_eq(_Flags,_Eq,_XType,_YType,_Dpth,_Slf,X,Y,TF):- notrace(as_tf_nowarn(X=:=Y,TF)),!. |
1034 | 1018 | eval_until_eq(_Flags,_Eq,_XType,_YType,_Dpth,_Slf,X,Y,TF):- notrace(as_tf_nowarn('#='(X,Y),TF)),!. |
1035 | 1019 | %eval_until_eq(Flags,Eq,XType,YType,_Dpth,_Slf,X,Y,TF):- X\=@=Y,unify_woc(X,Y),!,check_returnval(Eq,XType,YType,Y,TF). |
|
2193 | 2177 | */ |
2194 | 2178 |
|
2195 | 2179 | eval_10(Eq,RetType,Depth,Self,['if-unify',X,Y,Then|ElseL],Res):- !, |
2196 | | - (eval_args_true(Eq,'Bool',Depth,Self,['metta-unify',X,Y]) |
2197 | | - *-> eval_args(Eq,RetType,Depth,Self,Then,Res) |
2198 | | - ; (ElseL=[Else],eval_args(Eq,RetType,Depth,Self,Else,Res))). |
| 2180 | + %(eval_args_true(Eq,'Bool',Depth,Self,['metta-unify',X,Y]) |
| 2181 | + (as_tf( \+ \+ unify_woc(X,Y),TF),if_or_else((TF=='True',X=Y),eval_args_true(Eq,'Bool',Depth,Self,['metta-unify',X,Y])) |
| 2182 | + *-> eval_args(Eq,RetType,Depth,Self,Then,Res) |
| 2183 | + ; (ElseL=[Else],eval_args(Eq,RetType,Depth,Self,Else,Res))). |
2199 | 2184 |
|
2200 | 2185 |
|
2201 | 2186 |
|
|
3510 | 3495 | */ |
3511 | 3496 | %eval_40(Eq,RetType,_Dpth,_Slf,['==',X,Y],Res):- !, subst_args(Eq,RetType,_Dpth,_Slf,['==',X,Y],Res). |
3512 | 3497 |
|
3513 | | -eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- X=@=Y, X\==Y, !,TF='False'. |
| 3498 | +%eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- X=@=Y, X\==Y, !,TF='False'. |
3514 | 3499 | eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- copy_term(X+Y,XX+YY,_),XX=@=YY,XX\==YY, !,TF='False'. |
3515 | 3500 | eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- (var(X) , var(Y)), !, as_tf(X==Y,TF),!. |
3516 | 3501 | eval_40(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- (var(X) , var(Y)), !, as_tf(X==Y,TF),!. |
|
3519 | 3504 | woc((ignore(get_operator_typedef(Self,'metta-unify',2,[XType,YType],RetType)), |
3520 | 3505 | eval_until_eq_tf(['metta-unify',double_sided],Eq, XType, YType, Depth,Self, X, Y, TF))). |
3521 | 3506 |
|
3522 | | -eval_20(Eq,RetType,Depth,Self,['==',X,Y],TF):- !, |
| 3507 | +eval_20(Eq,RetType,Depth,Self,['==',X,Y],TF):- fail, !, |
3523 | 3508 | ignore(get_operator_typedef(Self,'==',2,[XType,YType],RetType)), |
3524 | 3509 | eval_until_eq_tf(['==',dont_eval],Eq, XType, YType, Depth,Self, X, Y, TF). |
3525 | 3510 |
|
|
0 commit comments