|
2365 | 2365 | if_or_else(get_type(Depth,Other,Val,Type),Type='%Undefined%'), %term_singletons(Type,[]), %Type\==[], Type\==Val,!, |
2366 | 2366 | do_expander(Eq,RetType,Type,TypeO). |
2367 | 2367 |
|
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). |
| 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). |
2369 | 2369 | 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). |
2370 | 2370 |
|
2371 | 2371 | eval_20(_Eq,_RetType,_Depth,_Self,['get-metatype',Val],TypeO):- !, |
|
3390 | 3390 | same_terms(X,Y):- \+ compound(X), X==Y. |
3391 | 3391 | % Main evaluation predicate with full caching |
3392 | 3392 |
|
3393 | | -transpiler_peek(Sym,Len,Type,Fn):- |
3394 | | - transpiler_predicate_store(_, Sym, [Len], _, _, _, _), |
| 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],_, _, _, _))), |
3395 | 3401 | if_t(var(Type),member(Type,['mx','mi','mc'])), |
| 3402 | + if_t(var(Len),between(1,10,Len)), |
3396 | 3403 | format(atom(Fn),'~w__1_~w_~w',[Type,Len,Sym]), |
3397 | 3404 | succ(Len,LenP1), current_predicate(Fn/LenP1), |
3398 | | - if_t(nb_current('eval_in_only', interp), \+ symbol_impl_exists(interp,Sym,Len)), |
3399 | | - nop(ok_call_predicate(Sym,Len)). |
| 3405 | + ok_call_predicate(Sym,Len,Type). |
| 3406 | + |
| 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). |
3400 | 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). |
3401 | 3426 |
|
3402 | 3427 |
|
3403 | 3428 | ok_call_predicate(Sym,Min, _Type):- |
3404 | | - \+ transpiler_predicate_store(_,Sym,[Min],_,_,_,_), |
3405 | | - \+ transpiler_predicate_nary_store(_,Sym,Min,_,_,_,_,_,_), |
3406 | | - \+ transpiler_clause_store(Sym,[Min],_,_,_,_,_,_,_). |
3407 | | - |
| 3429 | + if_t(nb_current('eval_in_only', interp), \+ symbol_impl_exists(interp,Sym,Len)). |
3408 | 3430 |
|
3409 | 3431 | eval_20(Eq, RetType, Depth, Self, [Sym | Args], Res) :- symbol(Sym), is_list(Args), |
3410 | | - length(Args, Len), |
3411 | | - memoize_tf(transpiler_peek(Sym,Len,'mi',Fn)), |
3412 | | - append(Args, [Res], PArgs),!, |
| 3432 | + len_or_unbound(Args, Len), |
| 3433 | + transpiler_peek(Sym,Len,'mi',Fn, Min, AsList), |
| 3434 | + jiggle_args(Args,Res,Len,Min,AsList,PArgs), |
3413 | 3435 | with_metta_ctx(Eq, RetType, Depth, Self, [Sym | Args], apply(Fn, PArgs)). |
3414 | 3436 |
|
3415 | 3437 | jiggle_args(Args,Ret,LenIsMin,LenIsMin,exactArgs,PArgs):- !, append(Args, [Ret], PArgs). |
|
3420 | 3442 | jiggle_append(Left,Right,Ret,exactArgs,PArgs):- append(Left, [Ret], PArgs), !, must_unify(Right,[]). |
3421 | 3443 |
|
3422 | 3444 | eval_20(Eq, RetType, Depth, Self, [Sym | Args], Res) :- symbol(Sym), is_list(Args), |
3423 | | - length(Args, Len), |
3424 | | - memoize_tf(transpiler_peek(Sym,Len,'mx',Fn)), |
3425 | | - append(Args, [Res], PArgs),!, |
| 3445 | + len_or_unbound(Args, Len), |
| 3446 | + transpiler_peek(Sym,Len,'mx',Fn, Min, AsList), |
| 3447 | + jiggle_args(Args,Res,Len,Min,AsList,PArgs), |
3426 | 3448 | with_metta_ctx(Eq, RetType, Depth, Self, [Sym | Args], apply(Fn, PArgs)). |
3427 | 3449 |
|
3428 | 3450 | eval_40(Eq,RetType,Depth,Self,[Sym|Args],Res):- symbol(Sym), is_list(Args), |
3429 | | - length(Args,Len), |
3430 | | - memoize_tf(transpiler_peek(Sym,Len,'mc',Fn)), |
3431 | | - append(Args,[Res],PArgs),!, |
| 3451 | + len_or_unbound(Args,Len), |
| 3452 | + transpiler_peek(Sym,Len,'mc',Fn, Min,AsList), |
| 3453 | + jiggle_args(Args,Res,Len,Min,AsList,PArgs), |
3432 | 3454 | with_metta_ctx(Eq,RetType,Depth,Self,[Sym|Args],apply(Fn,PArgs)). |
3433 | 3455 |
|
3434 | 3456 |
|
|
0 commit comments