Skip to content

Commit 73e90b7

Browse files
committed
greedy chess post-fail
1 parent 2487a97 commit 73e90b7

File tree

3 files changed

+89
-55
lines changed

3 files changed

+89
-55
lines changed

prolog/metta_lang/metta_compiler.pl

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,7 +1032,7 @@
10321032

10331033
compiled_refs(Symbol,F,A,Info):-
10341034
functor_chkd(P,F,A),clause(P,B,Ref), (\+ compiler_data_no_call(F/A) -> call(B) ; true), symbol_in(2,Symbol,P),
1035-
(B==true->Info=Ref;Info=P).
1035+
(B==true->Info=Ref;Info= (P:-B) ).
10361036

10371037

10381038
symbol_in(_, Symbol, P):-Symbol=@=P,!.
@@ -1160,17 +1160,27 @@
11601160
%'=~'(A,B):- var(A),iz_conz(B),!,A=B.
11611161
%'=~'(A,B):- iz_conz(A),var(B),!,A=B.
11621162
%'=~'(A,B):- iz_conz(A),iz_conz(B),!,A=B.
1163-
'=~'(A,B):- into_list_args(A,AA),copy_term(AA,AAA,_G),copy_term_nat(AAA,AAAC),!,into_list_args(B,BB),
1164-
!,AAAC=BB,!,AAAC=@=AAA,AA=AAAC,!.
1163+
1164+
'=~'(A,B):- quietly('=~_impl'(A,B)).
1165+
1166+
'=~_impl'(A,B):- iz_conz(B),B=[F|Args],nonvar(F),!,'=~'(A,[FF|Args]),F=FF.
1167+
'=~_impl'(A,B):- \+ iz_conz(B),compound(B),compound_name_arguments(B,F,Args),!,'=~'(A,[F|Args]).
1168+
'=~_impl'(A,B):- into_list_args(A,AA),copy_term(AA,AAA,G),copy_term_nat(AAA,AAAC),!,into_list_args(B,BB),
1169+
!,AAAC=BB,!,AAAC=@=AAA,AA=AAAC,!,maplist(call,G).
11651170

11661171
% non-singleton Variable
11671172
is_nsVar(NS):- is_ftVar(NS), NS\=@= '$VAR'('_').
11681173

11691174
skip_me( AA,AAA):- \+ compound(AA),!,AA=AAA.
11701175
skip_me([A,_,C|AA],AAA):- A == u_assign,AAA=[C|AA],!.
1171-
skip_me([A,B,C|AA],AAA):- symbol(A),metta_meta_f(A),!,skip_me([B,C|AA],AAA).
1176+
skip_me([A,B,C|AA],AAA):- symbol(A),skip_me_f(A),!,skip_me([B,C|AA],AAA).
11721177
skip_me(AA,AA).
11731178

1179+
skip_me_f('@').
1180+
skip_me_f('call-fn').
1181+
skip_me_f(A):- metta_meta_f(A),!.
1182+
skip_me_f(A):- atom(A),atom_concat(L,'!',A),!,skip_me_f(L).
1183+
11741184
into_list_args(A,AA):- into_list_args0(A,AAA),!,skip_me(AAA,AAAA),AAAA=AA.
11751185
into_list_args0(A,A):- is_ftVar(A).
11761186
into_list_args0(A,A):- is_nsVar(A).
@@ -1185,6 +1195,40 @@
11851195

11861196

11871197

1198+
%constraintFor(Op,Len,[Ar|ATypes],Rel,ArgType,Nth):- Ar=='->',!,skelectalFor(Op,Len,[Op|ATypes],argNIsa,Rel,ArgType,Nth).
1199+
%argumentsFor(Op,Len,Args,Rel,ArgType,Nth):- skelectalFor(Op,Len,Relation,Args,Ret,Pred,Rel,Arg,Nth)
1200+
1201+
constraintFor(Op,_Len,Args,Ret,Pred,Rel,Arg,Nth):- %relation_args(MaybeOp,Len,Relation,Args,Ret),ignore(MaybeOp=Op),
1202+
nth0(Nth,[Ret|Args],Arg),s_or_p_term(Rel,[Pred,Op,Nth,Arg]).
1203+
1204+
relation_args(Op,Len,Relation,Args,Ret):- (nonvar(Args);nonvar(Len)),!,
1205+
length(Args,Len),
1206+
append([Op|Args],[Ret],OpArgsWRet),
1207+
s_or_p_term(Relation,OpArgsWRet).
1208+
1209+
relation_args(Op,Len,Relation,Args,Ret):- (nonvar(Op),nonvar(Relation)),!,
1210+
Relation =.. List, append(_,[Op|ArgsWRet],List),
1211+
append(Args,[Ret],ArgsWRet),length(Args,Len).
1212+
1213+
1214+
s_or_p_term(Relation,OpArgsWRet):- nonvar(Relation),nonvar(OpArgsWRet),!,Relation =.. List, append(_,OpArgsWRet,List).
1215+
s_or_p_term(Relation,[Op|ArgsWRet]):- var(Relation), is_list(ArgsWRet),!, (var(Op)-> Relation =.. [v,Op|ArgsWRet] ; Relation =..[Op|ArgsWRet]).
1216+
s_or_p_term(Relation,OpArgsWRet):- nonvar(Relation),var(OpArgsWRet), Relation =.. List, append(Left,[Op|ArgsWRet],List), is_ok_op(Left,[Op|ArgsWRet]),!.
1217+
1218+
is_ok_op([],[Op|_ArgsWRet]):- nonvar(Op), !, \+ metta_meta_f(Op).
1219+
is_ok_op([NotOp],[Op|_ArgsWRet]):- metta_meta_f(NotOp), \+ metta_meta_f(Op).
1220+
1221+
is_metta_meta_f(Op):- nonvar(Op), metta_meta_f(Op).
1222+
1223+
1224+
metta_meta_f(v).
1225+
metta_meta_f(M):- atom(M), atom_chars(M,Chars),metta_meta_chars(Chars).
1226+
%metta_meta_chars([_]).
1227+
metta_meta_chars([m,_]).
1228+
1229+
1230+
1231+
11881232
compound_name_list(AsPred,FP,PredArgs):- var(AsPred),!,AsPred=[FP|PredArgs].
11891233
compound_name_list(AsPred,FP,PredArgs):- iz_conz(AsPred),!,AsPred=[FP|PredArgs].
11901234
compound_name_list(AsPred,FP,PredArgs):- into_list_args(AsPred,[FP|PredArgs]),!.
@@ -2168,6 +2212,7 @@
21682212
f2p_assign(Op, _HeadIs, Nth, RetType,ValueR,Value,info(is_non_eval_kind(Op,Nth,RetType))):- is_non_eval_kind(RetType),
21692213
is_list(Value), \+ is_evaled(Value), ValueR=Value,!.
21702214

2215+
21712216
%f2p_assign(_Op, _HeadIs, _Nth, RetType,ValueR,Value,info(is_non_eval_kind(Value,RetType))):- is_non_eval_kind(RetType), ValueR=Value,!.
21722217
f2p_assign(_Op, _HeadIs, _Nth,_RetType,ValueR,Value,true/*info(is_nsVar(Value))*/):- is_nsVar(Value),Value=ValueR,!.
21732218
f2p_assign(_Op, _HeadIs, _Nth, RetType,ValueR,Value,eval_for(RetType, Value,ValueR)):- is_nsVar(Value),!.

prolog/metta_lang/metta_compiler_lib.pl

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
2+
3+
:- if(false).
4+
5+
:- include(metta_compiler_lib_roy).
6+
7+
:- else.
8+
19
:- ensure_loaded(metta_compiler).
210
:- dynamic(transpiler_predicate_store/7).
311
:- discontiguous(transpiler_predicate_store/7).
@@ -23,7 +31,7 @@
2331
:- forall(between(3,12,N), decl_ddm(mc_n,N)).
2432
:- forall(between(3,12,N), decl_ddm(ms_n,N)).
2533

26-
non_eval_arg(F,N):- argIsa(F,N,NonEval),non_evaled_Type(NonEval),!.
34+
non_eval_arg(F,N):- argIsa(F,N,NonEval),non_evaluated_type(NonEval),!.
2735

2836
e_i(F, N, A, AA):- i_c(F, N, A, AA).
2937

@@ -33,7 +41,15 @@
3341
i_c(F, N, A, AA):- non_eval_arg(F,N),!,A=AA.
3442
i_c(_, _, A, AA):- eval(A,AA).
3543

44+
ee(_Let_type,_,E,R):- nonvar(R), E=R,!.
45+
ee(_Let_type,_,E,R):- is_list(E), !, eval_args(E,ER),ER=R.
46+
ee(_Let_type,_,E,R):- E=R,!.
3647

48+
mc('while!',Bool,Goal,Out):-
49+
repeat,
50+
((eval(Bool,TF)->is_True(TF))
51+
->(once(mc(Goal,Out)),fail)
52+
;(!,true)).
3753

3854
mci(F, R) :- call_by_ftype(F, 0, mc(F, R), R).
3955
mci(F, X0, R) :- call_by_ftype(F, 1, mc(F, X0, R), R).
@@ -117,6 +133,8 @@
117133

118134
:- op(700,xfx,('haz_value')).
119135

136+
retrace :- ignore(nortrace),notrace,trace.
137+
120138
% Main Logic
121139
call_by_ftype(F, Len, Goal, ReturnVal) :-
122140
un_mc(_,Goal,Len,[F | Parameters], ReturnVal), !,
@@ -130,11 +148,16 @@
130148

131149
% Validate enums dynamically using explicit_isa to ensure valid inputs
132150
%validate_function_type_enums(MismatchBehavior, NoMatchBehavior, EvaluationOrder, SuccessBehavior, FailureBehavior, OutOfClausesBehavior),
151+
debug_info(predicate_behavior(Self, F, Len, MismatchBehavior)),
133152

134153
% Retrieve all clauses for the predicate
135154
findall(thbr(ParamTypes, Params, Body, ReturnVal, RetType),
136155
function_declaration_lib(Self, F, Len, Params, ParamTypes, RetType, Body, _WrappedBody, ReturnVal), Clauses),
137156

157+
debug_info(predicate_clauses(Clauses)),
158+
159+
retrace,
160+
138161
% Extract parameter types and group them by index across all clauses
139162
findall(Types, (member(thbr(Types, _, _, _, RetType), Clauses)), ParamTypesPerClause),
140163
group_types_by_param_index(ParamTypesPerClause, Grouped),
@@ -1167,9 +1190,7 @@
11671190
mx_n(2,'py-dot',Arg1,Arg2,Specialize,ResO) :-
11681191
make_py_dot(Arg1,Arg2,Res),specialize_res(Res,Specialize,ResO).
11691192

1170-
1171-
1172-
:- writeln('; maybe ?- setup_library_calls.').
1193+
% (py-dot math exp True (-> Number Number Number) )
11731194

11741195
setup_library_calls :-
11751196
forall(
@@ -1185,10 +1206,6 @@
11851206

11861207
setup_inits :- gen_mdecl.
11871208

1188-
:- writeln('; maybe ?- gen_i2c, gen_mdecl.').
1189-
1190-
1191-
:- writeln('; maybe ?- do_setup_inits.').
11921209
do_setup_inits:-
11931210
locally(nb_setval(debug_context, stdlib), user_err(forall(setup_inits,true))).
11941211

@@ -1305,4 +1322,4 @@
13051322

13061323

13071324

1308-
1325+
:- endif.

prolog/metta_lang/metta_ontology.pfc.pl

Lines changed: 14 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -88,43 +88,6 @@
8888
N1 is N-1,
8989
merge_fp(T1,T2,N1).
9090

91-
92-
93-
94-
%constraintFor(Op,Len,[Ar|ATypes],Rel,ArgType,Nth):- Ar=='->',!,skelectalFor(Op,Len,[Op|ATypes],argNIsa,Rel,ArgType,Nth).
95-
%argumentsFor(Op,Len,Args,Rel,ArgType,Nth):- skelectalFor(Op,Len,Relation,Args,Ret,Pred,Rel,Arg,Nth)
96-
97-
constraintFor(Op,_Len,Args,Ret,Pred,Rel,Arg,Nth):- %relation_args(MaybeOp,Len,Relation,Args,Ret),ignore(MaybeOp=Op),
98-
nth0(Nth,[Ret|Args],Arg),s_or_p_term(Rel,[Pred,Op,Nth,Arg]).
99-
100-
relation_args(Op,Len,Relation,Args,Ret):- (nonvar(Args);nonvar(Len)),!,
101-
length(Args,Len),
102-
append([Op|Args],[Ret],OpArgsWRet),
103-
s_or_p_term(Relation,OpArgsWRet).
104-
105-
relation_args(Op,Len,Relation,Args,Ret):- (nonvar(Op),nonvar(Relation)),!,
106-
Relation =.. List, append(_,[Op|ArgsWRet],List),
107-
append(Args,[Ret],ArgsWRet),length(Args,Len).
108-
109-
110-
s_or_p_term(Relation,OpArgsWRet):- nonvar(Relation),nonvar(OpArgsWRet),!,Relation =.. List, append(_,OpArgsWRet,List).
111-
s_or_p_term(Relation,[Op|ArgsWRet]):- var(Relation), is_list(ArgsWRet),!, (var(Op)-> Relation =.. [v,Op|ArgsWRet] ; Relation =..[Op|ArgsWRet]).
112-
s_or_p_term(Relation,OpArgsWRet):- nonvar(Relation),var(OpArgsWRet), Relation =.. List, append(Left,[Op|ArgsWRet],List), is_ok_op(Left,[Op|ArgsWRet]),!.
113-
114-
is_ok_op([],[Op|_ArgsWRet]):- nonvar(Op), !, \+ metta_meta_f(Op).
115-
is_ok_op([NotOp],[Op|_ArgsWRet]):- metta_meta_f(NotOp), \+ metta_meta_f(Op).
116-
117-
is_metta_meta_f(Op):- nonvar(Op), metta_meta_f(Op).
118-
119-
120-
metta_meta_f(v).
121-
metta_meta_f(M):- atom(M), atom_chars(M,Chars),metta_meta_chars(Chars).
122-
metta_meta_chars([_]).
123-
metta_meta_chars([m,_]).
124-
125-
126-
127-
12891
:- set_prolog_flag(pfc_term_expansion,true).
12992

13093
%metta_atom_asserted(KB2,Y) ==> {metta_atom_asserted_hook(KB2,Y)}.
@@ -175,6 +138,12 @@
175138
metta_type_info(KB,Op,ArTypeDecl)/(arrow_type(ArTypeDecl,ParamTypes,RetType),length(ParamTypes,Len))==>
176139
metta_params_and_return_type(KB,Op,Len,ParamTypes,RetType).
177140

141+
metta_type_info(KB,Op,ArTypeDecl)/(arrow_type(ArTypeDecl,ParamTypes,_),length(ParamTypes,Len),nth1(Nth,ParamTypes,Nonvar))==>
142+
argNType(KB,Op,Len,Nth,Nonvar).
143+
144+
145+
146+
178147
metta_params_and_return_type(KB,Op,Len,ParamTypes,RetType)/(arrow_type(ArTypeDecl,ParamTypes,RetType),length(ParamTypes,Len)) ==>
179148
metta_type_info(KB,Op,ArTypeDecl).
180149

@@ -203,15 +172,18 @@
203172
204173
*/
205174

206-
metta_params_and_return_type(KB,Op,Len,ParamTypes,RetType)/(constraintFor(Op,Len,ParamTypes,RetType,argNType,_Fact,Nonvar,Nth), Nth>0) ==> argNType(KB,Op,Len,Nth,Nonvar).
175+
metta_params_and_return_type(KB,Op,Len,ParamTypes,_RetType)/nth1(Nth,ParamTypes,Nonvar) ==> argNType(KB,Op,Len,Nth,Nonvar).
176+
207177
metta_params_and_return_type(KB,Op,Len,_ParamTypes,RetType) ==> returnType(KB,Op,Len,RetType).
208178

209179

210180
non_evaluated_type('Atom').
211181
non_evaluated_type('Expression').
212-
non_evaluated_type('Varaible').
182+
non_evaluated_type('Variable').
213183
non_evaluated_type('Symbol').
214184

185+
:- dynamic(argIsEvaled/5).
186+
215187
(argNType(KB, Op, Len, Nth, Type)/nonvar(Type), non_evaluated_type(Type)) ==> argIsEvaled(KB,Op,Len,Nth,false).
216188
(argNType(KB, Op, Len, Nth, Type)/nonvar(Type), \+ non_evaluated_type(Type)) ==> argIsEvaled(KB,Op,Len,Nth,true).
217189

@@ -256,7 +228,7 @@
256228
257229
('op-complete'(op(+,':',Op))
258230
==>
259-
(( metta_type(KB,Op,TypeList)/is_list(TypeList),
231+
(( metta_type_info(KB,Op,TypeList)/is_list(TypeList),
260232
{params_and_return_type(TypeList,Len,Params,Ret)}) ==>
261233
metta_params_and_return_type(KB,Op,Len,Params,Ret),{do_once(show_deds_w(Op))})).
262234
@@ -453,7 +425,7 @@
453425
properties('&corelib','let*', [variable_assignment, qhelp("Sequential variable assignment."), sequential]).
454426
properties('&corelib','sealed', [variable_scoping, qhelp("Variable scoping.")]).
455427
properties('&corelib','function', [function_definition, qhelp("Function block.")]).
456-
properties('&corelib','return', [function_definition, qhelp("Ret value of a function block."), return_value]).
428+
properties('&corelib','return', [function_definition, qhelp("Return value of a function block."), return_value]).
457429
properties('&corelib','Error', [error_handling, qhelp("Defines or triggers an error.")]).
458430

459431
% --- Error Handling and Advanced Control Flow ---
@@ -580,7 +552,7 @@
580552
properties('&corelib','stringToChars', [string_operations, qhelp("Convert a string to a list of chars."), string_to_chars]).
581553
properties('&corelib','charsToString', [string_operations, qhelp("Convert a list of chars to a string."), chars_to_string]).
582554
properties('&corelib','format-args', [string_operations, qhelp("Generate a formatted string using a format specifier."), format_args]).
583-
properties('&corelib','flip', [random, qhelp("Ret a random boolean."), random_boolean]).
555+
properties('&corelib','flip', [random, qhelp("Return a random boolean."), random_boolean]).
584556

585557

586558

0 commit comments

Comments
 (0)