Skip to content

Commit c7ef5d0

Browse files
committed
still need to updated the 3
1 parent faccb01 commit c7ef5d0

File tree

1 file changed

+62
-120
lines changed

1 file changed

+62
-120
lines changed

prolog/metta_lang/metta_eval.pl

Lines changed: 62 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
:- meta_predicate(fake_notrace(0)).
6262
:- meta_predicate(color_g_mesg(+,0)).
6363
:- multifile(color_g_mesg/2).
64+
:- discontiguous(symbol_impl_exists/3).
65+
:- discontiguous(symbol_impl_not_exists/3).
66+
:- dynamic(symbol_impl_exists/3).
67+
:- dynamic(symbol_impl_not_exists/3).
68+
:- discontiguous(symbol_impl_only/3).
6469

6570
%self_eval0(X):- var(X),!,fail.
6671
self_eval0(X):- \+ callable(X),!.
@@ -222,14 +227,11 @@
222227

223228
%! eval_args(+X,-Y) is semidet.
224229
eval_args(X,Y):- current_self(Self),
225-
default_depth(DEPTH),
230+
default_start_depth(DEPTH),
226231
eval_args(DEPTH,Self,X,Y).
227232
%eval_args(Eq,RetType,Depth,_Self,X,_Y):- forall(between(6,Depth,_),write(' ')),writeqln(eval_args(Eq,RetType,X)),fail.
228233
eval_args(Depth,Self,X,Y):- eval_args('=',_RetType,Depth,Self,X,Y).
229234

230-
:- dynamic(symbol_impl_exists/3).
231-
:- dynamic(symbol_impl_not_exists/3).
232-
symbol_impl_not_exists(interp,'random-int',_).
233235
symbol_impl_not_exists(compiler,'notcompiled',_).
234236
symbol_impl_exists(compiler,Sym,A):- symbol_impl_not_exists(interp,Sym,A).
235237
skip_scan_impl(symbol_impl_exists/3).
@@ -251,14 +253,15 @@
251253
listing(symbol_impl_exists).
252254

253255
eval_20(X,Y):- current_self(Self),
254-
default_depth(DEPTH),
256+
default_start_depth(DEPTH),
255257
eval_20(DEPTH,Self,X,Y).
256258
%eval_20(Eq,RetType,Depth,_Self,X,_Y):- forall(between(6,Depth,_),write(' ')),writeqln(eval_20(Eq,RetType,X)),fail.
257259
eval_20(Depth,Self,X,Y):- eval_20('=',_RetType,Depth,Self,X,Y).
258260

261+
default_start_depth(0).
259262

260263
eval_40(X,Y):- current_self(Self),
261-
default_depth(DEPTH),
264+
default_start_depth(DEPTH),
262265
eval_40(DEPTH,Self,X,Y).
263266
%eval_40(Eq,RetType,Depth,_Self,X,_Y):- forall(between(6,Depth,_),write(' ')),writeqln(eval_40(Eq,RetType,X)),fail.
264267
eval_40(Depth,Self,X,Y):- eval_40('=',_RetType,Depth,Self,X,Y).
@@ -475,15 +478,8 @@
475478

476479

477480
eval_09(Eq,RetType,Depth,Self,X,Y):-
478-
nb_current('eval_in_only', interp), !,
481+
nb_current('eval_in_only', interp), !,
479482
woc(eval_10(Eq,RetType,Depth,Self,X,Y)).
480-
eval_09(Eq,RetType,Depth,Self,X,Y):-
481-
nb_current('eval_in_only', compiler), !,
482-
with_scope(Eq, RetType, Depth, Self, transpile_eval(X,Y)).
483-
eval_09(Eq,RetType,Depth,Self,X,Y):-
484-
nb_current('eval_in_only', rust), !,
485-
with_scope(Eq, RetType, Depth, Self, rust_metta_run(exec(X),Y)).
486-
487483
eval_09(Eq,RetType,Depth,Self,X,Y):- hybrid_interp, !,
488484
eval_use_right_thing(Eq,RetType,Depth,Self,X,Y).
489485
eval_09(Eq,RetType,Depth,Self,X,Y):- woc(eval_10(Eq,RetType,Depth,Self,X,Y)).
@@ -528,7 +524,7 @@
528524
eval_10(_Eq,_RetType,_Dpth,_Self,X,YO):- self_eval(X),!,YO=X.
529525
eval_10(_Eq,_RetType,_Dpth,_Self,X,_YO):- X==[empty],!,fail.
530526
eval_10(_Eq,_RetType,_Dpth,_Self,X,_YO):- X==['Empty'],!,fail.
531-
eval_10(_Eq,_RetType,Depth,_Self,X,YO):- overflow_depth(Depth),bt,trace,!,X=YO.
527+
eval_10(_Eq,_RetType,Depth,_Self,X,YO):- Depth<0,bt,trace,!,X=YO.
532528
eval_10(Eq,RetType,Depth,Self,X,Y):- var(X), !, % sanity_check_eval(eval_10_var,X),
533529
eval_20(Eq,RetType,Depth,Self,X,Y).
534530

@@ -560,14 +556,7 @@
560556
maplist(as_prolog_x(Depth,Self), [Sym|Args] , [ASym|Adjusted]),
561557
eval_20(Eq,RetType,Depth,Self, [ASym|Adjusted], Y),sanity_check_eval(eval_20_not_atom,Y).
562558

563-
eval_10(Eq,RetType,Depth,Self,['eval-in-only',Where,Eval],Y):-
564-
Where==interp,!,
565-
eval_in_only(Where,eval_10(Eq,RetType,Depth,Self,Eval,Y)).
566-
eval_10(Eq,RetType,Depth,Self,['eval-in-only',Where,Eval],Y):- !,
567-
eval_in_only(Where,eval_args(Eq,RetType,Depth,Self,Eval,Y)).
568-
569-
570-
eval_20(_Eq,_RetType,Depth,_Self,X,YO):- overflow_depth(Depth),bt,trace,!,X=YO.
559+
eval_20(_Eq,_RetType,Depth,_Self,X,YO):- Depth<0,bt,trace,!,X=YO.
571560
eval_20(Eq,RetType,_Dpth,_Slf,Name,Y):-
572561
atom(Name), !,
573562
(Name=='NotReducible'->throw(metta_NotReducible);
@@ -576,38 +565,21 @@
576565
sanity_check_eval(eval_20_atom,Y).
577566

578567
eval_20(_Eq,RetType,Depth,Self,[Sym|Args],Res):-
579-
atomic(Sym), py_is_callable(Sym), is_list(Args), !,
580-
maplist(as_prolog_x(Depth,Self), Args , Adjusted),!,
581-
py_call_method_and_args_sig(RetType,[],Sym,Adjusted,Res).
582-
583-
eval_20(_Eq,RetType,Depth,Self,['py-atom-call!',Sym|Args],Res):- is_list(Args), !,
568+
atomic(Sym), py_is_function(Sym), is_list(Args), !,
584569
maplist(as_prolog_x(Depth,Self), Args , Adjusted),!,
585-
py_call_method_and_args_sig(RetType,[],Sym,Adjusted,Res).
586-
eval_40(Eq,RetType,Depth,Self,['py-atom-call',Sym|Args],Res):-
587-
eval_20(Eq,RetType,Depth,Self,['py-atom-call!',Sym|Args],Res).
588-
570+
py_call_method_and_args(Sym,Adjusted,Ret),
571+
py_metta_return_value(RetType, Ret,Res).
589572

590-
eval_py_atom(_Eq,_RetType,_Depth,_Self,['py-atom',Arg|Specialize],ResO):-
591-
must_det_lls((py_atom(Arg,Res))),
592-
specialize_res(Res,Specialize,ResO).
593573

594-
eval_py_atom(_Eq,_RetType,_Depth,_Self,['py-dot',Arg1,Arg2|Specialize],ResO):-
595-
must_det_lls(make_py_dot(Arg1,Arg2,Res)),
596-
specialize_res(Res,Specialize,ResO).
574+
eval_py_atom(_Eq,_RetType,_Depth,_Self,['py-atom',Arg],Res):-
575+
must_det_ll((py_atom(Arg,Res))).
597576

598-
specialize_res(Res,Specialize,Res):-
599-
if_t(Specialize\==[], debug_info(todo,warn(ignoring(specialize=Specialize)))).
600-
601-
eval_20(_Eq,RetType,Depth,Self,['py-dot-call!',[Arg1,Arg2|Specialize]|Args],Res):- is_list(Args), !,
602-
maplist(as_prolog_x(Depth,Self), Args , Adjusted),!,
603-
make_py_dot(Arg1,Arg2,Specialize,SymRes),
604-
py_call_method_and_args_sig(RetType,Specialize,SymRes,Adjusted,Res).
605-
eval_40(Eq,RetType,Depth,Self,['py-dot-call',Sym|Args],Res):-
606-
eval_20(Eq,RetType,Depth,Self,['py-dot-call!',Sym|Args],Res).
577+
eval_py_atom(_Eq,_RetType,_Depth,_Self,['py-atom',Arg,Type],Res):-
578+
must_det_ll((py_atom_type(Arg,Type,Res))).
607579

608580

609581
was_py_call(Eq,RetType,Depth,Self,PyAtom,Sym,PArgs,ParamList,RRetType):-
610-
atomic(PyAtom), py_is_callable(PyAtom), !, Sym = PyAtom,
582+
atomic(PyAtom), py_is_function(PyAtom), !, Sym = PyAtom,
611583
into_param_types(Eq,RetType,Depth,Self,Sym,PArgs,ParamList,RRetType).
612584
was_py_call(Eq,RetType,Depth,Self,[PyAtom|Args],Sym,PArgs,ParamList,RRetType):- fail, PyAtom == 'py-atom',!,
613585
eval_py_atom(Eq,RetType,Depth,Self,[PyAtom|Args],Sym),
@@ -684,7 +656,7 @@
684656
op_to_pred_call_ret(PyAtom,Pred2,Ret3):- is_list(PyAtom),!,
685657
maybe_trace(unknown) ,eval_py_atom(_Eq,_RetType,_Depth,_Self,PyAtom,Res),!,op_to_pred_call_ret(Res,Pred2,Ret3).
686658
op_to_pred_call_ret(PyAtom,Pred2,Ret3):-
687-
py_is_callable(PyAtom), !, Sym = PyAtom,
659+
py_is_function(PyAtom), !, Sym = PyAtom,
688660
Pred2= py_call_method_and_args(Sym),
689661
Ret3= py_metta_return_value().
690662

@@ -1432,7 +1404,7 @@
14321404
'=u='(X0,Y0) :- (X0 = Y0).
14331405
'=will'(X0,Y0) :- \+ \+ (X0 = Y0).
14341406
% alpha equivelant
1435-
'=alpha'(X0,Y0) :- equal_enough_for_test_renumbered(alpha_equ,X0,Y0),!.
1407+
'=alpha'(X0,Y0) :- equal_enough_for_test_renumbered(alpha_equ,X0,Y0).
14361408
% like =alpha, however it actualyl also unifies (if they were alpha)
14371409
'=alpha-unify'(X0,Y0) :- '=alpha'(X0,Y0), blend_vars(X0,Y0).
14381410

@@ -1771,12 +1743,6 @@
17711743
eval_10(Eq,RetType,Depth,Self,['switch',A,CL|T],Res):- !,
17721744
eval_10(Eq,RetType,Depth,Self,['case',A,CL|T],Res).
17731745

1774-
:- set_prolog_flag(gc,false).
1775-
1776-
eval_10(Eq,RetType,Depth,Self,I,Res):- fail,
1777-
once(metta_to_metta_body_macro_recurse(eval10,I,O)),I\=@=O,!,
1778-
eval_10(Eq,RetType,Depth,Self,O,Res).
1779-
17801746
eval_10_disabled(Eq,RetType,Depth,Self,[P,X|More],YY):- fail, is_list(X),X=[_,_,_],simple_math(X),
17811747
eval_selfless_2(X,XX),X\=@=XX,!, eval_20(Eq,RetType,Depth,Self,[P,XX|More],YY).
17821748
% if there is only a void then always return nothing for each Case
@@ -2048,7 +2014,7 @@
20482014
eval_args(Eq,RetType,Depth,Self,['container-unify',Arg1,Arg2|Args],Res).
20492015
% 3) Otherwise, default to using `if-unify` for the unify operation.
20502016
eval_10(Eq,RetType,Depth,Self,['unify',Arg1,Arg2|Args],Res):- !,
2051-
eval_args(Eq,RetType,Depth,Self,['if',['metta-unify',Arg1,Arg2]|Args],Res).
2017+
eval_args(Eq,RetType,Depth,Self,['if-unify',Arg1,Arg2|Args],Res).
20522018

20532019
eval_10(Eq,RetType,Depth,Self,['container-unify',Arg1,Arg2,Then|ElseL],Res):- !,
20542020
((metta_container_sub_part(Arg1,Part),eval_args_true(Eq,'Bool',Depth,Self,['==',Part,Arg2]))
@@ -2365,7 +2331,7 @@
23652331
if_or_else(get_type(Depth,Other,Val,Type),Type='%Undefined%'), %term_singletons(Type,[]), %Type\==[], Type\==Val,!,
23662332
do_expander(Eq,RetType,Type,TypeO).
23672333

2368-
%eval_20(Eq,RetType,Depth,Self,['length',L],Res):- !, eval_args(Eq,RetType,Depth,Self,L,LL), !, (is_list(LL)->length(LL,Res);Res=1).
2334+
eval_20(Eq,RetType,Depth,Self,['length',L],Res):- !, eval_args(Eq,RetType,Depth,Self,L,LL), !, (is_list(LL)->length(LL,Res);Res=1).
23692335
eval_20(Eq,RetType,Depth,Self,['CountElement',L],Res):- !, eval_args(Eq,RetType,Depth,Self,L,LL), !, (is_list(LL)->length(LL,Res);Res=1).
23702336

23712337
eval_20(_Eq,_RetType,_Depth,_Self,['get-metatype',Val],TypeO):- !,
@@ -2537,21 +2503,22 @@
25372503

25382504
with_scope(Eq,RetType,Depth,Self,Goal):-
25392505
%grab_scope([eq=WEq,retType=WRetType,depth=WDepth,self=WSelf]),
2540-
setup_call_cleanup(push_scope([eq=Eq,retType=RetType,depth=Depth,self=Self]),
2506+
setup_call_cleanup(push_scope([eq = Eq,retType=RetType,depth=Depth,self=Self]),
25412507
Goal,
2542-
pop_scope([eq=Eq,retType=RetType,depth=Depth,self=Self])).
2508+
pop_scope([eq = Eq,retType=RetType,depth=Depth,self=Self])).
25432509

25442510

25452511

25462512
ppp_default_value(self,V):- current_self(V), nocut.
2547-
ppp_default_value(depth,StackMax):- current_prolog_flag(max_tagged_integer,MaxTI),option_else('stack-max',StackMax,MaxTI).
2513+
ppp_default_value(depth,0). % current_prolog_flag(max_tagged_integer,MaxTI),option_else('stack-max',StackMax,MaxTI).
2514+
%ppp_default_value(depth,StackMax):- current_prolog_flag(max_tagged_integer,MaxTI),option_else('stack-max',StackMax,MaxTI).
25482515
ppp_default_value(retType,_).
2549-
ppp_default_value(eq,=).
2516+
ppp_default_value((eq),(=)).
25502517

25512518

2552-
peek_scope(Eq,RetType,Depth,Self):- peek_scope([eq=Eq,retType=RetType,depth=Depth,self=Self]).
2519+
peek_scope(Eq,RetType,Depth,Self):- peek_scope([eq = Eq,retType=RetType,depth=Depth,self=Self]).
25532520
peek_scope(List):- maplist(peek_scope_item,List).
2554-
peek_scope_item(N=V):- peek_scope_item(N,V).
2521+
peek_scope_item(N=V):- peek_scope_item(N,V),!.
25552522

25562523
peek_scope_item(N,V):- peek_current_scope(N,V),!.
25572524
peek_scope_item(N,V):- ppp_default_value(N,V),!.
@@ -2562,17 +2529,20 @@
25622529
first_of([V|_],V):-!.
25632530
first_of(V,V).
25642531

2565-
push_scope(Eq,RetType,Depth,Self):- must_det_lls(push_scope([eq=Eq,retType=RetType,depth=Depth,self=Self])).
2566-
push_scope(List):- maplist(push_scope_item,List).
2567-
push_scope_item(N=V):- push_scope_item(N,V),!.
2532+
must_det_lls_cf(G):- call(G),!.
2533+
must_det_lls_cf(G):- trace,call(G),!.
2534+
push_scope(Eq,RetType,Depth,Self):- push_scope([eq = Eq,retType=RetType,depth=Depth,self=Self]).
2535+
push_scope([]). push_scope([H|T]):- ignore((push_scope_item(H),push_scope(T))).
2536+
push_scope_item(N=V):- !, push_scope_item(N,V),!.
2537+
push_scope_item(NV):- trace, print(pi(NV)).
25682538
push_scope_item(N,V):- push_current_scope(N,V),!.
2569-
push_current_scope(N,V):- nb_current(N,List)->nb_setval(N,[V|List]),nb_setval(N,[V]).
2539+
push_current_scope(N,V):- (notrace(nb_current(N,List))->nb_setval(N,[V|List]),nb_setval(N,[V])),!.
25702540

25712541

2572-
pop_scope(Eq,RetType,Depth,Self):- pop_scope([eq=Eq,retType=RetType,depth=Depth,self=Self]).
2542+
pop_scope(Eq,RetType,Depth,Self):- pop_scope([eq = Eq,retType=RetType,depth=Depth,self=Self]).
25732543
pop_scope(List):- maplist(pop_scope_item,List).
25742544
pop_scope_item(N=V):- pop_scope_item(N,V).
2575-
pop_scope_item(N,V):- pop_current_scope(N,V),!.
2545+
pop_scope_item(N,V):- peek_current_scope(N,V),!.
25762546
pop_scope_item(N,V):- ppp_default_value(N,V),!.
25772547

25782548

@@ -2759,7 +2729,7 @@
27592729
%eval_args(Eq,RetType,Depth,Self,X,Y):- eval_20(Eq,RetType,Depth,Self,X,Y)*->true;Y=[].
27602730

27612731
%eval_20(Eq,RetType,Depth,_,_,_):- Depth<1,!,fail.
2762-
%eval_20(Eq,RetType,Depth,_,X,Y):- overflow_depth(3,Depth), !, ground(X), (Y=X).
2732+
%eval_20(Eq,RetType,Depth,_,X,Y):- Depth<3, !, ground(X), (Y=X).
27632733
%eval_20(Eq,RetType,_Dpth,_Slf,X,Y):- self_eval(X),!,Y=X.
27642734

27652735
% Kills zero arity functions eval_20(Eq,RetType,Depth,Self,[X|Nil],[Y]):- Nil ==[],!,eval_args(Eq,RetType,Depth,Self,X,Y).
@@ -3288,7 +3258,7 @@
32883258
% Macro Functions
32893259
%eval_20(Eq,RetType,Depth,_,_,_):- Depth<1,!,fail.
32903260
/*
3291-
eval_40(_Eq,_RetType,Depth,_,X,Y):- overflow_depth(3,Depth), !, fail, ground(X), (Y=X).
3261+
eval_40(_Eq,_RetType,Depth,_,X,Y):- Depth<3, !, fail, ground(X), (Y=X).
32923262
eval_40(Eq,RetType,Depth,Self,[F|PredDecl],Res):-
32933263
fail,
32943264
Depth>1,
@@ -3342,15 +3312,14 @@
33423312
eval_40(Eq,RetType,Depth, Self,['py-atom'|Args],Res):- !,
33433313
eval_py_atom(Eq,RetType,Depth,Self,['py-atom'|Args],Res).
33443314

3345-
eval_40(Eq,RetType,Depth,Self,['py-dot'|Args],Res):- !,
3346-
eval_py_atom(Eq,RetType,Depth,Self,['py-dot'|Args],Res).
3347-
3315+
eval_40(_Eq,_RetType,_Depth,_Self,['py-dot',Arg1,Arg2| _Specialize],Res):- !,
3316+
make_py_dot(Arg1,Arg2,Res).
33483317
eval_40(_Eq,_RetType,_Depth,_Self,['py-type',Arg],Res):- !,
33493318
must_det_ll((py_type(Arg,Res))).
33503319
eval_40(_Eq,_RetType,_Depth,_Self,['py-eval',Arg],Res):- !,
33513320
must_det_ll((py_eval_string(Arg,Res))).
33523321

3353-
eval_40(Eq,RetType,Depth,Self,['length',L],Res):- fail, !, eval_args(Depth,Self,L,LL),
3322+
eval_40(Eq,RetType,Depth,Self,['length',L],Res):- !, eval_args(Depth,Self,L,LL),
33543323
(is_list(LL)->length(LL,Res);Res=1),
33553324
check_returnval(Eq,RetType,Res).
33563325

@@ -3368,12 +3337,9 @@
33683337
*/
33693338
%eval_40(Eq,RetType,_Dpth,_Slf,['==',X,Y],Res):- !, subst_args(Eq,RetType,_Dpth,_Slf,['==',X,Y],Res).
33703339

3371-
eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],_):- X\=@=Y,fail.
3372-
eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],_):- X=@=Y, X\==Y,!,fail.
33733340
eval_20(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- (var(X) , var(Y)), !, as_tf(X==Y,TF),!.
33743341
eval_40(_Eq,_RetType,_Depth,_Self,['==', X,Y],TF):- (var(X) , var(Y)), !, as_tf(X==Y,TF),!.
33753342

3376-
33773343
eval_40(Eq,RetType,Depth,Self,['==',X,Y],TF):- !,
33783344
ignore(get_operator_typedef(Self,'==',2,[XType,YType],RetType)),
33793345
eval_until_eq_tf(['=='],Eq, XType, YType, Depth,Self, X, Y, TF).
@@ -3390,48 +3356,25 @@
33903356
same_terms(X,Y):- \+ compound(X), X==Y.
33913357
% Main evaluation predicate with full caching
33923358

3393-
%eval_40(=,_RetType,_,_,['make-var'|Types],Var):- !, 'mx__1_0+_make-var'(Types,Var).
3394-
%eval_40(=,_RetType,_,_,['bless-var',Var|Types],Var):- !, 'mx__1_1+_bless-var'(Var,Types,Var).
3395-
3396-
3397-
transpiler_peek(Sym,Len,Type,Fn, Len, exactArgs):-
3398-
if_t((var(Sym)),ignore(transpiler_predicate_store(_, Sym,_ , _, _, _, _))),
3399-
nonvar(Sym),
3400-
if_t((var(Len)),ignore(transpiler_predicate_store(_,Sym,[Len],_, _, _, _))),
3359+
transpiler_peek(Sym,Len,Type,Fn):-
3360+
transpiler_predicate_store(_, Sym, [Len], _, _, _, _),
34013361
if_t(var(Type),member(Type,['mx','mi','mc'])),
3402-
if_t(var(Len),between(1,10,Len)),
34033362
format(atom(Fn),'~w__1_~w_~w',[Type,Len,Sym]),
34043363
succ(Len,LenP1), current_predicate(Fn/LenP1),
3405-
ok_call_predicate(Sym,Len,Type).
3364+
nop(ok_call_predicate(Sym,Len)).
34063365

3407-
transpiler_peek(Sym,2,'mi',Fn, 2, exactArgs):-
3408-
nonvar(Sym),
3409-
atom_concat('mi__1_2_',Sym,Fn),current_predicate(Fn/3),
3410-
\+ transpiler_predicate_store(_, Sym, [2], _, _, _, _),
3411-
ok_call_predicate(Sym,Len,Type).
3412-
3413-
transpiler_peek(Sym,Len,Type,Fn, Min, restAsList):-
3414-
between(0,Len, Min),
3415-
if_t(var(Type),member(Type,['mx','mi','mc'])),
3416-
format(atom(Fn),'~w__1_~w+_~w',[Type,Min,Sym]),
3417-
succ(Min,N1),succ(N1,LenP1), current_predicate(Fn/LenP1),
3418-
ok_call_predicate(Sym,Len,Type).
3419-
3420-
transpiler_peek(Sym,Len,Type,Fn, Min, restAsList):-
3421-
between(0,Len, Min),
3422-
if_t(var(Type),member(Type,['mx','mi','mc'])),
3423-
format(atom(Fn),'~w_n_~w__~w',[Type,Min,Sym]),
3424-
succ(Min,N1),succ(N1,LenP1), current_predicate(Fn/LenP1),
3425-
ok_call_predicate(Sym,Len,Type).
34263366

34273367

34283368
ok_call_predicate(Sym,Min, _Type):-
3429-
if_t(nb_current('eval_in_only', interp), \+ symbol_impl_exists(interp,Sym,Len)).
3369+
\+ transpiler_predicate_store(_,Sym,[Min],_,_,_,_),
3370+
\+ transpiler_predicate_nary_store(_,Sym,Min,_,_,_,_,_,_),
3371+
\+ transpiler_clause_store(Sym,[Min],_,_,_,_,_,_,_).
3372+
34303373

34313374
eval_20(Eq, RetType, Depth, Self, [Sym | Args], Res) :- symbol(Sym), is_list(Args),
3432-
len_or_unbound(Args, Len),
3433-
transpiler_peek(Sym,Len,'mi',Fn, Min, AsList),
3434-
jiggle_args(Args,Res,Len,Min,AsList,PArgs),
3375+
length(Args, Len),
3376+
memoize_tf(transpiler_peek(Sym,Len,'mi',Fn)),
3377+
append(Args, [Res], PArgs),!,
34353378
with_metta_ctx(Eq, RetType, Depth, Self, [Sym | Args], apply(Fn, PArgs)).
34363379

34373380
jiggle_args(Args,Ret,LenIsMin,LenIsMin,exactArgs,PArgs):- !, append(Args, [Ret], PArgs).
@@ -3442,15 +3385,15 @@
34423385
jiggle_append(Left,Right,Ret,exactArgs,PArgs):- append(Left, [Ret], PArgs), !, must_unify(Right,[]).
34433386

34443387
eval_20(Eq, RetType, Depth, Self, [Sym | Args], Res) :- symbol(Sym), is_list(Args),
3445-
len_or_unbound(Args, Len),
3446-
transpiler_peek(Sym,Len,'mx',Fn, Min, AsList),
3447-
jiggle_args(Args,Res,Len,Min,AsList,PArgs),
3388+
length(Args, Len),
3389+
memoize_tf(transpiler_peek(Sym,Len,'mx',Fn)),
3390+
append(Args, [Res], PArgs),!,
34483391
with_metta_ctx(Eq, RetType, Depth, Self, [Sym | Args], apply(Fn, PArgs)).
34493392

34503393
eval_40(Eq,RetType,Depth,Self,[Sym|Args],Res):- symbol(Sym), is_list(Args),
3451-
len_or_unbound(Args,Len),
3452-
transpiler_peek(Sym,Len,'mc',Fn, Min,AsList),
3453-
jiggle_args(Args,Res,Len,Min,AsList,PArgs),
3394+
length(Args,Len),
3395+
memoize_tf(transpiler_peek(Sym,Len,'mc',Fn)),
3396+
append(Args,[Res],PArgs),!,
34543397
with_metta_ctx(Eq,RetType,Depth,Self,[Sym|Args],apply(Fn,PArgs)).
34553398

34563399

@@ -4005,7 +3948,7 @@
40053948
if_t(between(401,420,Depth),writeq(a(B0))),
40063949
if_t(between(397,400,Depth),(writeq(b(B0)),trace)),
40073950
if_t(between(392,397,Depth),(writeq(c(B0)),maybe_trace(unknown),fail)),
4008-
if_t(overflow_depth(380,Depth),(writeq(f(B0)),fail)).
3951+
if_t(Depth<380,(writeq(f(B0)),fail)).
40093952
*/
40103953

40113954
%eval_defn_failure(_Eq,_RetType,_Depth,_Self,X,X):- !.
@@ -4534,4 +4477,3 @@
45344477

45354478

45364479

4537-

0 commit comments

Comments
 (0)