|
3425 | 3425 | call_as_p2a(F,X,Y):- must_use_eval(F,2), !,
|
3426 | 3426 | once(eval([F,X,Y],RetVal)),
|
3427 | 3427 | f2_success(RetVal,X,Y).
|
3428 |
| -%call_as_p2(F2,A,B):- f2_to_p2(F2,P2),F2\==P2,!,call(P2,A,B). |
3429 |
| -call_as_p2a(F2,A,B):- f2_to_p3(F2,P3),F2\==P3,!,call(P3,A,B,RetVal),f2_success(RetVal,A,B). |
| 3428 | +%call_as_p2(F2,A,B):- f2_to_p2(Pre,F2,P2),F2\==P2,!,call(P2,A,B). |
| 3429 | +call_as_p2a(F2,A,B):- f2_to_p3(_Pre,F2,P3),F2\==P3,!,call(P3,A,B,RetVal),f2_success(RetVal,A,B). |
3430 | 3430 | call_as_p2a(F2,A,B):- eval_as_f2(F2,A,B,RetVal),f2_success(RetVal,A,B).
|
3431 | 3431 |
|
3432 | 3432 | f2_success(RetVal,A,B):- once(RetVal=='True';RetVal==A;RetVal==B).
|
3433 | 3433 |
|
3434 | 3434 | eval_as_f2(F2,A,B,RetVal):- current_predicate_fast(F2/3),!,call(F2,A,B,RetVal),!.
|
3435 |
| -eval_as_f2(F2,A,B,RetVal):- f2_to_p3(F2,P3),!,call(P3,A,B,RetVal). |
| 3435 | +eval_as_f2(F2,A,B,RetVal):- f2_to_p3(_Pre,F2,P3),!,call(P3,A,B,RetVal). |
3436 | 3436 | eval_as_f2(F2,A,B,RetVal):- once(eval([F2,A,B],TF)),
|
3437 | 3437 | (TF == 'True'-> RetVal=A ;
|
3438 | 3438 | TF == 'False'-> fail ; RetVal = TF).
|
3439 | 3439 |
|
3440 |
| -f2_to_p2(F2,P2):- |
3441 |
| - transpiler_peek(F2,2,[mx,me,mi,mc],P2,_,exactArgs). |
| 3440 | +f2_to_p2(Pre,F2,P2):- |
| 3441 | + transpiler_peek(Pre,F2,2,[mx,me,mi,mc],P2,_,exactArgs). |
3442 | 3442 |
|
3443 |
| -f2_to_p3(F2,P2):- |
3444 |
| - transpiler_peek(F2,2,[mx,me,mi,mc],P2,_,exactArgs). |
| 3443 | +f2_to_p3(Pre,F2,P2):- |
| 3444 | + transpiler_peek(Pre,F2,2,[mx,me,mi,mc],P2,_,exactArgs). |
3445 | 3445 |
|
3446 | 3446 |
|
3447 | 3447 |
|
|
3719 | 3719 | same_terms(X,Y):- \+ compound(X), X==Y.
|
3720 | 3720 | % Main evaluation predicate with full caching
|
3721 | 3721 |
|
| 3722 | +/* |
3722 | 3723 |
|
3723 |
| - |
3724 |
| -transpiler_peek(Sym,Len,TypeL,Fn, Min, SpreadArgs):- |
3725 |
| - transpiler_peek_impl(Sym,Len,TypeL,Fn, Min, SpreadArgs), |
3726 |
| - debug_info(always(compiler),transpiler_peek(Sym,Len,TypeL,Fn, Min, SpreadArgs)). |
3727 |
| - |
3728 |
| -transpiler_peek_impl(Sym,Len,TypeL,Fn, Min, SpreadArgs):- |
| 3724 | +m_head_impl_va(pre,'py-atom!',_,mc_n1('py-atom'),1). |
| 3725 | +m_head_impl_va(post,'py-atom',_,mx_n1('py-atom'),1). |
| 3726 | +m_head_impl_va(pre,'py-dot!',_,mc_n2('py-dot'),2). |
| 3727 | +m_head_impl_va(post,'py-dot',_,mx_n2('py-dot'),2). |
| 3728 | +*/ |
| 3729 | +info(_). |
| 3730 | + |
| 3731 | +gen_mdecl:- forall(gen_mdecl(_),true). |
| 3732 | + |
| 3733 | +gen_mdecl(exactArgs):- |
| 3734 | + forall(pre_post_functor(Pre,MC), |
| 3735 | + forall(between(0,10,Len), |
| 3736 | + ((length(Args,Len), append([F|Args],[_Ret],AfterMC), P=..[MC|AfterMC]), |
| 3737 | + forall(clause(P,_Body), |
| 3738 | + if_t(ground(F),compiler_assertz_verbose(m_head_impl(F,Len,Pre,MC))))))). |
| 3739 | +gen_mdecl(restAsList):- |
| 3740 | + forall(pre_post_functor_va(Pre,MC), |
| 3741 | + forall(between(0,10,Len), |
| 3742 | + ((length(Args,Len), append([Len,F|Args],[_AsList,_Ret],AfterMC), P=..[MC|AfterMC]), |
| 3743 | + forall(clause(P,_Body), |
| 3744 | + if_t(ground(F),compiler_assertz_verbose(m_head_impl_va(F,Len,Pre,MC))))))). |
| 3745 | + |
| 3746 | + |
| 3747 | +pre_post_functor(pre,mc). |
| 3748 | +pre_post_functor(post,mx). |
| 3749 | +pre_post_functor_va(pre,mc_n). |
| 3750 | +pre_post_functor_va(post,mx_n). |
| 3751 | + |
| 3752 | +:- dynamic(m_head_impl/4). |
| 3753 | +m_head_impl('random-int',3,post,mx). |
| 3754 | + |
| 3755 | +:- dynamic(m_head_impl_va/4). |
| 3756 | +m_head_impl_va('py-dot!',2,post,mc_n). |
| 3757 | +m_head_impl_va('py-dot',2,post,mx_n). |
| 3758 | +m_head_impl_va('py-atom!',1,post,mc_n). |
| 3759 | +m_head_impl_va('py-atom',1,post,mx_n). |
| 3760 | + |
| 3761 | +m_head_impl(Pre,Sym,Len, Type,Fn, Min, exactArgs):- |
| 3762 | + if_t((var(Pre),nonvar(Type)),pre_post_functor(Pre,Type)), |
| 3763 | + m_head_impl(Sym,Min,Pre,IsType),!, Min=Len, Fn =.. [IsType,Sym]. |
| 3764 | +m_head_impl(Pre,Sym,Len, Type,Fn, Min, restAsList):- |
| 3765 | + if_t((var(Pre),nonvar(Type)),pre_post_functor(Pre,Type)), |
| 3766 | + m_head_impl_va(Sym,Min,Pre,IsType), Min =< Len, !, Fn =.. [IsType,Min,Sym]. |
| 3767 | + |
| 3768 | + |
| 3769 | +transpiler_peek(Pre,Sym,Len,TypeL,Fn, Min, SpreadArgs):- |
| 3770 | + member(Sym,['random-int','random-seed']), |
| 3771 | + transpiler_peek_impl(Pre,Sym,Len,TypeL,Fn, Min, SpreadArgs), |
| 3772 | + debug_info(always(compiler),transpiler_peek(Pre,Sym,Len,TypeL,Fn, Min, SpreadArgs)). |
| 3773 | + |
| 3774 | +transpiler_peek_impl(Pre,Sym,Len,TypeL,Fn, Min, SpreadArgs):- |
3729 | 3775 | is_list(TypeL), !, member(Type,TypeL),
|
3730 |
| - transpiler_peek(Sym,Len,Type,Fn, Min, SpreadArgs). |
| 3776 | + transpiler_peek(Pre,Sym,Len,Type,Fn, Min, SpreadArgs). |
| 3777 | + |
| 3778 | +transpiler_peek_impl(Pre,Sym,Len,Type,Fn, Min, SpreadArgs):- |
| 3779 | + m_head_impl(Pre,Sym,Len,Type,Fn, Min, SpreadArgs),!. |
3731 | 3780 |
|
3732 |
| -transpiler_peek_impl(Sym,Len,Type,Fn, Min, exactArgs):- Len=Min, |
| 3781 | +transpiler_peek_impl(_Pre,Sym,Len,Type,Fn, Min, exactArgs):- Len=Min, |
3733 | 3782 | if_t((var(Sym)),ignore(transpiler_predicate_store(_, Sym,_ , _, _, _, _))),
|
3734 | 3783 | nonvar(Sym),
|
3735 | 3784 | if_t((var(Len)),ignore(transpiler_predicate_store(_,Sym,[Len],_, _, _, _))),
|
|
3739 | 3788 | succ(Len,LenP1), current_predicate_fast(Fn/LenP1),
|
3740 | 3789 | ok_call_predicate(Sym,Len,Type).
|
3741 | 3790 |
|
3742 |
| -transpiler_peek_impl(Sym,Len,Type,Fn, Min, restAsList):- |
| 3791 | +transpiler_peek_impl(_Pre,Sym,Len,Type,Fn, Min, restAsList):- |
3743 | 3792 | % if_t((var(Sym)),ignore(transpiler_predicate_nary_store(_, Sym,_ , _, _, _, _))),
|
3744 | 3793 | if_t(var(Len),between(1,10,Len)),
|
3745 | 3794 | if_t(var(Type),member(Type,['mx','me','mi','mc'])),
|
|
3750 | 3799 | ok_call_predicate(Sym,Len,Type).
|
3751 | 3800 |
|
3752 | 3801 | /*
|
3753 |
| -transpiler_peek_impl(Sym,Len,Type,Fn, Min, restAsList):- |
| 3802 | +transpiler_peek_impl(Pre,Sym,Len,Type,Fn, Min, restAsList):- |
3754 | 3803 | between(0,Len, Min),
|
3755 | 3804 | if_t(var(Type),member(Type,['mx','mi','mc'])),
|
3756 | 3805 | format(atom(Fn),'~w_n_~w__~w',[Type,Min,Sym]),
|
|
3791 | 3840 | fail,
|
3792 | 3841 | symbol(Sym), is_list(Args),
|
3793 | 3842 | length(Args, Len),
|
3794 |
| - transpiler_peek(Sym,Len,'mx',Fn, Min, AsList), |
| 3843 | + transpiler_peek(pre,Sym,Len,['mx','me'],Fn, Min, AsList), |
3795 | 3844 | jiggle_args(Args,Res,Len,Min,AsList,PArgs), ! ,
|
3796 | 3845 | with_metta_ctx(Eq, RetType, Depth, Self, [Sym | Args], apply(Fn, PArgs)).
|
3797 | 3846 |
|
3798 | 3847 | eval_40(Eq, RetType, Depth, Self, [Sym | Args], Res) :-
|
3799 | 3848 | %fail,
|
3800 | 3849 | symbol(Sym), is_list(Args),
|
3801 | 3850 | length(Args, Len),
|
3802 |
| - transpiler_peek(Sym,Len,'mi',Fn, Min, AsList), |
| 3851 | + transpiler_peek(post,Sym,Len,['mi','mc','me','mx'],Fn, Min, AsList), |
3803 | 3852 | jiggle_args(Args,Res,Len,Min,AsList,PArgs),
|
3804 | 3853 | %length(PArgs,LenP1), (symbol_file(Fn/LenP1,Sym,Len, scan_exists_in_interp);symbol_file(Fn/LenP1,Sym,Len, exists_in_compiler)),
|
3805 | 3854 | !,
|
|
0 commit comments