1:-swi_module(world_text_output, []). 12:- include(prologmud(mud_header)). 13
14
16
18
22
23:-export(default_repl_buffer/4). 24default_repl_buffer(Loc,_TL,_N,_Type,V):- arg(1,Loc,Prev),append(Prev,[V],New),
25 nb_setarg(1,Loc,New).
26default_repl_obj_to_string_buffer(Out,_Type,Out).
27
28:-export(default_repl_writer/4). 29default_repl_writer(TL,N,Type,V):- default_repl_writer_1(TL,N,Type,V),!.
30:-export(default_repl_obj_to_string/3). 31default_repl_obj_to_string(O,Type,Out):- copy_term(Type,TypeO), ignore((TypeO = o )), ( TypeO == o -> Out=O ; Out = stringD(TypeO,O)).
32
33default_repl_writer_1(_TL,N,_Type,mudDescription(V)):- N==ftText,compound(V),!,fmt('~N~w~n',[V]).
34default_repl_writer_1(_TL,N,_Type,V):- N == text, compound(V),V=..[_,_,O],O==[],!.
35default_repl_writer_1(_TL,N,Type,V):-
36 copy_term(Type,TypeO),ignore(TypeO=o), ( TypeO == o -> fmt('~q= ~q.~n',[N,V]) ; fmt('~q=D(~w) ~q.~n',[N,TypeO,V])).
37
38
39canUseEnglish:-true.
40
41
42:-export(show_kb_preds/2). 43show_kb_preds(Agent,List):-
44 ignore(mudAtLoc(Agent,LOC)),
45 show_kb_preds(Agent,LOC,List),!.
46
47:-export(show_kb_preds/3). 48show_kb_preds(Agent,LOC,List):-
49 ignore((once(mudAtLoc(Agent,LOC);localityOfObject(Agent,LOC)))),
50 ignore((once(locationToRegion(LOC,Region);localityOfObject(Agent,Region)))),
51 show_binds_kb_preds(Agent,[vHere=Region,isSelf=LOC,isSelfAgent=Agent],List).
52
53show_kb_preds_to_buffer(Agent,LOC,List,Buffer):-
54 ignore((once(mudAtLoc(Agent,LOC);localityOfObject(Agent,LOC)))),
55 ignore((once(locationToRegion(LOC,Region);localityOfObject(Agent,Region)))),
56 show_binds_kb_preds_to_buffer(Agent,[vHere=Region,isSelf=LOC,isSelfAgent=Agent],List,Buffer).
57
58
59show_binds_kb_preds_to_buffer(_Agent,Substs,List,Buffer):-
60 must_det_l((
61 notrace(subst_each(List,Substs,ListR)),
62 dmsg(substs=Substs),
63 show_kb_via_pred(default_repl_buffer(Buffer),
64 default_repl_obj_to_string_buffer,ListR))),!.
65
66show_binds_kb_preds(Agent,Substs,List):-
67 must_det_l((
68 once((t_l:repl_writer(Agent,WPred);WPred=default_repl_writer)),
69 once((t_l:repl_to_string(Agent,ToSTR);ToSTR=default_repl_obj_to_string)),!,
70 subst_each(List,Substs,ListR),
71 dmsg(substs=Substs),
72 show_kb_via_pred(WPred,ToSTR,ListR))),!.
73
74
75
76:-export(show_kb_via_pred/3). 77show_kb_via_pred(_,_,[]).
78show_kb_via_pred(WPred,ToSTR,[L|List]):-!,must(show_kb_via_pred(WPred,ToSTR,L)),show_kb_via_pred(WPred,ToSTR,List),!.
79show_kb_via_pred(WPred,ToSTR,L):-!,no_loop_check(
80 catch((ignore(show_failure(show_kb_via_pred_0(WPred,ToSTR,L)))),
81 E,dmsg(error_failed(E,show_kb_via_pred_0(WPred,L))))),!.
82
83
84
85:-export(show_kb_via_pred_0/3). 86
87show_kb_via_pred_0(WPred,ToSTR,listof(Call)):- contains_var(value,Call),subst(Call,value,P,PCall),subst(Call,value,PS,PSCall),!,
88 show_kb_via_pred_0(WPred,ToSTR,forEach(findall(P,no_repeats(PCall),PS),fmt(PSCall))).
89
90show_kb_via_pred_0(WPred,ToSTR,listof(Call)):- !,show_kb_via_pred_format_call(WPred,ToSTR,Call,listof(Call)).
91
92
93show_kb_via_pred_0(WPred,ToSTR,F = Call):- contains_var(value,Call),value\==Call,!,show_kb_via_pred_format_call(WPred,ToSTR,F = value, Call),!.
94show_kb_via_pred_0(WPred,ToSTR,F = Call):- !,show_kb_via_pred_format_call(WPred,ToSTR, F = Call ,F = Call),!.
95show_kb_via_pred_0(WPred,ToSTR,forEach(Call,Show)):-!, show_kb_via_pred_format_call(WPred,ToSTR, Show, forEach(Call)),!.
96show_kb_via_pred_0(WPred,ToSTR,fmt(Show)):- !, show_kb_via_pred_format_call(WPred,ToSTR, Show ,true).
97show_kb_via_pred_0(_WPred,_STR,call(Call)):- !, with_output_to(string(Value),no_repeats(Call)),
98 fmt(Value),!.
99 100
101show_kb_via_pred_0(WPred,ToSTR,once(Call)):- !,show_kb_via_pred_format_call(WPred,ToSTR,Call,once(Call)),!.
102show_kb_via_pred_0(WPred,ToSTR,all(Call)):- !,functor(Call,F,_), show_kb_via_pred_1(WPred,ToSTR,F,all(Call)),!.
103show_kb_via_pred_0(WPred,ToSTR,Call):- functor(Call,F,_), show_kb_via_pred_1(WPred,ToSTR,F,Call),!.
104
105show_kb_via_pred_1(WPred,ToSTR,F,all(Call)):-!,show_kb_via_pred_2(WPred,ToSTR,F,Call).
106show_kb_via_pred_1(WPred,ToSTR,F,once(Call)):-!,show_kb_via_pred_2(WPred,ToSTR,F,once(Call)).
107show_kb_via_pred_1(_WPred,_ToSTR,_F,call(Call)):-!,on_x_debug(req1(Call)).
108show_kb_via_pred_1(WPred,ToSTR,F,Call):-show_kb_via_pred_2(WPred,ToSTR,F,Call).
109
110
111show_kb_via_pred_format_call(WPred0,ToSTRIn,Format0,Call0):-
112 wsubst(Call0:Format0,value(ToSTR),value,Call:Format),
113 ignore( ToSTR = (ToSTRIn) ),
114 subst([WPred0,ToSTR,Format,Call],value,_NewValue,[WPred,ToSTROut,FormatOut,GCall]),
115 show_kb_via_pred_fmt(WPred,ToSTROut,FormatOut,_UnkType,GCall).
116
117
118show_kb_via_pred_fmt(WPred,ToSTR,SayIt,_Type,forEach(GCall)):-!,forall(req1(GCall),show_kb_via_pred_0(WPred,ToSTR,SayIt)).
119show_kb_via_pred_fmt(WPred,ToSTR,SayIt,Type,listof(GCall)):-!,findall(SayIt,catch(req1(GCall),Error,(dmsg(error(SayIt=Error:GCall)),fail)),Count),
120 merge_list_on_p(WPred,ToSTR,SayIt,Type,GCall,_NewValue,Count).
121show_kb_via_pred_fmt(WPred,ToSTR,SayIt,Type,GCall):-!,findall(SayIt,catch(req1(GCall),Error,(dmsg(error(SayIt=Error:GCall)),fail)),Count),
122 merge_list_on_p(WPred,ToSTR,SayIt,Type,GCall,_NewValue,Count).
123
124
125merge_list_on_p(_WPred,_ToSTR,_SayIt,_Type,_GCall,_NewValue,[]):-
126 127 !. 128
129merge_list_on_p(WPred,ToSTR,SayIt,Type,GCall,_NewValue,[]):-
130 fmt_holds_tcall(WPred,ToSTR,SayIt,Type,notFound(f1SayIt,SayIt,Type,GCall)).
131
132
133merge_list_on_p(WPred,ToSTR,SayIt,Type,_GCall,_NewValue,SayItList):- SayIt = ( _ = _ ),!,
134 findall(K,(member(KV,SayItList),arg(1,KV,K)),Keys),
135 list_to_set(Keys,KeySet),!,
136 forall(member(K,KeySet),
137 (findall(V,(member(KV,SayItList),arg(1,KV,K),arg(2,KV,V)),VS),
138 fmt_holds_tcall(WPred,ToSTR,K,Type,VS))).
139
140merge_list_on_p(WPred,ToSTR,_SayIt,Type,listof(_GCall),_NewValue,SayItList):-
141 findall(K,(member(KV,SayItList),arg(1,KV,K)),Keys),
142 list_to_set(Keys,KeySet),!,
143 forall(member(K,KeySet),
144 (findall(KV,(member(KV,SayItList),arg(1,KV,K)),VS),
145 fmt_holds_tcall(WPred,ToSTR,K,Type,VS))).
146
147merge_list_on_p(WPred,ToSTR, _SayIt ,Type,_GCall,_NewValue,SayItList):- fmt_holds_tcall(WPred,ToSTR,ftText,Type,SayItList).
148
149
151
152:-export(req1/1). 153req1(O):- is_list(O),!,maplist(req1,O).
154req1(O):- no_repeats(call_u(O)).
155
156missing_out(_).
157
158
159show_kb_via_pred_2(WPred0,ToSTRIn,F0,Call0):-
160 wsubst(Call0,value(ToSTR),value,Call),
161 ignore( ToSTR = (ToSTRIn) ),
162 subst([WPred0,ToSTR,F0,Call],value,NewValue,[WPred,ToSTROut,F,GCall]),
163 show_kb_via_pred_3(WPred,ToSTROut,F,_UnkType,GCall,NewValue),!.
164
165show_kb_via_pred_3(WPred,ToSTR,fmt(SayIt),Type,GCall,NewValue):-!,
166 167 findall(NewValue,(catch(req1(GCall),Error, NewValue=Error),
168 fmt((SayIt))),Count),
169 (Count==[] ->
170 missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f1,F,Type))); true),!.
171
172show_kb_via_pred_3(WPred,ToSTR,fmt,Type,GCall,NewValue):-!,
173 174 findall(NewValue,(catch(req1(GCall),Error, NewValue=Error),
175 fmt(GCall)),Count),
176 (Count==[] ->
177 missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f2,F,Type))); true),!.
178
179
180show_kb_via_pred_3(WPred,ToSTR,output,Type,GCall,NewValue):-!,
181 182 findall(NewValue,(catch(req1(GCall),Error, NewValue=Error),
183 fmt_holds_tcall(WPred,ToSTR,F,Type,NewValue)),Count),
184 (Count==[] ->
185 missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f3,F,Type))); true),!.
186
187
188show_kb_via_pred_3(WPred,ToSTR,F,Type,GCall,NewValue):- canUseEnglish,!,
189 190 findall(NewValue,(catch(req1(GCall),Error, NewValue=Error),
191 fmt_holds_tcall(WPred,ToSTR,text,Type,GCall)),Count),!,
192 (Count==[] ->
193 (missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f4,F,Type)))); true),!.
194
195show_kb_via_pred_3(WPred,ToSTR,F,Type,GCall,NewValue):-
196 197 findall(NewValue,(catch(req1(GCall),Error, NewValue=Error),
198 fmt_holds_tcall(WPred,ToSTR,F,Type,NewValue)),Count),
199 (Count==[] ->
200 missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f5,F,Type))); true),!.
201
202
203fmt_holds_tcall(WPred,ToSTR,N,Type, V):- var(V),!,fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V),!.
204fmt_holds_tcall(WPred,ToSTR,N,Type,[V]):- fmt_holds_tcall(WPred,ToSTR,N,Type,V),!.
205fmt_holds_tcall(WPred,ToSTR,N,Type,[V|VV]):- is_list([V|VV]), list_to_set([V|VV],Vs), fmt_holds_tcall_pred(WPred,ToSTR,N,Type,Vs),!.
206fmt_holds_tcall(WPred,ToSTR,N,Type, V):- fmt_holds_tcall_pred(WPred,ToSTR,N,Type,V),!.
207
209fmt_holds_tcall_pred(WPred,ToSTR,N,Type,V0):-fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V0),!.
210
212fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V0):-must((on_x_debug(call(ToSTR,V0,Type,V)),!,on_x_debug(call(WPred,_Tn,N,Type,V)))),!.
213
214
215:- include(prologmud(mud_footer)).