13:- include(prologmud(mud_header)). 14
16
18
19when_command_show(Agent,ActionType):-
20 findall(Show,on_command_show(Agent,ActionType,Show),MORELOOK),
21 (MORELOOK==[] -> true;
22 (must(mudAtLoc(Agent,LOC)),show_kb_preds(Agent,LOC,MORELOOK))).
23
24
29:-export(generatePhrase_local/2). 30
31:- multifile lmconf:term_to_message_string/2. 32:- dynamic lmconf:term_to_message_string/2. 33
34lmconf:term_to_message_string(T,T):-var(T),!.
35lmconf:term_to_message_string(T,T):-!.
36lmconf:term_to_message_string(txtConcatFn(T),M):-on_x_debug(generatePhrase_local(T,M)),!.
37lmconf:term_to_message_string(fmt(T),M):-on_x_debug(generatePhrase_local(T,M)),!.
38lmconf:term_to_message_string(C,C):-compound(C),functor(C,F,_),is_leave_alone_msg(F),!.
39lmconf:term_to_message_string((T),M):-on_x_fail(generatePhrase_local(T,M)),!.
40lmconf:term_to_message_string(T,T):-!.
41
42is_leave_alone_msg(exact_message).
43is_leave_alone_msg(todo).
44is_leave_alone_msg((error)).
45is_leave_alone_msg(parserm).
47is_leave_alone_msg(A):-on_x_fail((sub_atom(A,_,1,0,S),atom_number(S,_))),!.
48
49prologBuiltin(term_anglify_args/6).
50prologBuiltin(term_anglify_last/2).
51:-export(term_anglify_args/6). 53
54term_anglify_last(Head,English):-compound(Head),
55 functor(Head,F,A),A>1,
56 not(ends_with_icase(F,"Fn")),not(starts_with_icase(F,"SKF-")),
57 atom_codes(F,[C|_]),code_type(C,lower),
58 Head=..[F|ARGS],
59 term_anglify_args(Head,F,A,ARGS,prologSingleValued,English).
60
61:- discontiguous(baseKB:mudTermAnglify/2). 62prologDynamic(baseKB:mudTermAnglify/2).
63baseKB:mudTermAnglify(A,B):-mudTermAnglify0(A,B).
64
65mudTermAnglify0(A,B):-local_term_anglify(A,B).
66
67mudTermAnglify0(Head,EnglishO):- compound(Head),
68 Head=..[F|ARGS],mpred_prop(F,_,Info),
69 member(Info,[prologSingleValued,predArgMulti(_)]),
70 term_anglify_args(Head,F,1,ARGS,Info,English),eng_fully_expand(English,EnglishO),!.
71
72mudTermAnglify0(verbFn(isa),[is,a]):-!.
73mudTermAnglify0(verbFn(F),[is|UL]):-not(string_lower(F,F)),unCamelCase(F,U),atomics_to_string(UL,"_",U).
74mudTermAnglify0(verbFn(F),[is,F]):-atom_concat(_,'ing',F).
75mudTermAnglify0(verbFn(F),[F,is]).
77mudTermAnglify0(determinerString(Obj,Text),[posNP(Obj),is,uses,ftString(Text),as,a,determiner]).
78mudTermAnglify0(nameString(Obj,Text),[posNP(Obj),is,refered,to,as,ftString(Text)]).
79mudTermAnglify0(mudTermAnglify(Term,Text),[ftCallable(Term),is,converted,to,english,using,ftCallable(Text)]).
80
81
82
83term_anglify_args(Head,F,A,ARGS,predArgMulti(Which),English):- !,replace_nth_arglist(ARGS,Which,NewVar,NEWARGS),!,
84 NewHead=..[F|NEWARGS], findall(NewVar,req1(NewHead),ListNewVar),list_to_set_safe(ListNewVar,SetNewVar),NewVar=ftListFn(SetNewVar),
85 term_anglify_args(Head,F,A,NewHead,prologSingleValued,English).
86
87
95term_anglify_args(_Head,F,A,ARGS0,prologSingleValued,English):- add_arg_parts_of_speech(F,1,ARGS0,ARGS),verb_after_arg(F,A,After),
96 insert_into(ARGS,After,verbFn(F),NEWARGS),
97 eng_fully_expand(NEWARGS,English),!.
98
99unCamelCase(S,String):-any_to_string(S,Str),S\=Str,!,unCamelCase(Str,String),!.
100unCamelCase("",""):-!.
101unCamelCase(S,String):-sub_string(S,0,1,_,Char),sub_string(S,1,_,0,Rest),unCamelCase(Rest,RestString),string_lower(Char,NewChar),
102(Char\=NewChar->atomics_to_string(['_',NewChar,RestString],String);atomics_to_string([Char,RestString],String)),!.
103
104term_anglify_np_last(Obj,T,String):- local_term_anglify_np_last(Obj,T,String).
105
106generatePhrase_local(Term,String):- on_x_debug(( eng_fully_expand(Term,EnglishM),!,
107 108 eng_fully_expand(EnglishM,EnglishG),fix_grammar(EnglishG,English) , join_for_string(English,String))),!.
109
110local_grammar_correction([are,is,"here"],[are,"here"]).
111local_grammar_correction(["you",is],["you",are]).
112local_grammar_correction(["you",Verb,is],[your,Verb,is]).
113
114local_grammar_correction([at,"right"],["right"]).
115local_grammar_correction([tRoom,are],[tRoom,is]).
116local_grammar_correction([in,tRegion,"here"],[is,"here"]).
117local_grammar_correction([X,X],[X]):-member(X,[is,are]).
118
119get_grammar_correction(C1,C2):-
120 local_grammar_correction(W1,W2),to_word_list(W1,C1),to_word_list(W2,C2).
121
122
123fix_grammar(String,WordsO):-to_word_list(String,Ws),fix_grammar_0(Ws,Words),(Words\=Ws->fix_grammar_0(Words,WordsO);Words=WordsO),!.
124
125fix_grammar_0([],[]).
126fix_grammar_0(EnglishG,English):-
127 get_grammar_correction(Before,After),
128 append_ci(Before,Rest,EnglishG),
129 append_ci(After,Rest,EnglishNew),
130 fix_grammar_0(EnglishNew,English),!.
131fix_grammar_0([Carry|EnglishG],[Carry|English]):-
132 fix_grammar_0(EnglishG,English),!.
133
134join_for_string(English,EnglishS):-on_x_fail(( flatten([English],EnglishF),list_to_atomics_list(EnglishF,EnglishA),atomics_to_string(EnglishA," ",EnglishS))),!.
135join_for_string(English,English).
136
137list_to_atomics_list(L,AL):-list_to_atomics_list0(L,AL),forall(member(E,AL),must(atomic(E))).
138
139list_to_atomics_list0(Var,A):-var(Var),!,any_to_string(Var,A),!.
140list_to_atomics_list0([E|EnglishF],[A|EnglishA]):-
141 any_to_string(E,A),
142 list_to_atomics_list0(EnglishF,EnglishA),!.
143list_to_atomics_list0([],[]):-!.
144
145
146eng_fully_expand(I,O):-loop_check(transitive(eng_fully_expand_ilc,I,O),I=O).
147eng_fully_expand_ilc(I,O):-copy_term(I,C),flatten([C],FC),eng_fully_expand_0(FC,O).
148
149eng_fully_expand_0(FC,O):-catch(eng_fully_expand_1(FC,O),E,(dtrace,dmsg(exact_message(error_m(E,eng_fully_expand_1(FC,O)))),fail)),!.
151
152eng_fully_expand_1(A,B):-loop_check(eng_fully_expand_1_ilc(A,B),A=B).
153
154eng_fully_expand_1_ilc(Var,Var):-var(Var),!.
155eng_fully_expand_1_ilc([],[]):-!.
157eng_fully_expand_1_ilc([T|TT],FTAO):-local_term_anglify_first([T|TT],TA),flatten([TA],FTA),eng_fully_expand_1(FTA,FTAO),!.
158eng_fully_expand_1_ilc([T|Term],Out):-!,
159 eng_fully_expand_2(T,E),
160 eng_fully_expand_1(Term,English),
161 flatten_append(E,English,Out),!.
162
163eng_fully_expand_1_ilc(T,E):-loop_check(eng_fully_expand_2(T,E),(T=E)),!.
164
165eng_fully_expand_2(Var,Var):-var(Var),!.
166eng_fully_expand_2([],[]):-!.
167eng_fully_expand_2(Var,Var):-not(compound(Var)),!.
168eng_fully_expand_2(T,FTAO):-local_term_anglify_first(T,TA),flatten([TA],FTA),eng_fully_expand_1(FTA,FTAO).
169eng_fully_expand_2(StringIsOK,StringIsOK):-string(StringIsOK),!.
170eng_fully_expand_2([T|Term],Out):-!,
171 eng_fully_expand_2(T,E),
172 eng_fully_expand_1(Term,English),
173 flatten_append(E,English,Out),!.
174eng_fully_expand_2(Pred,Pred):-!.
175eng_fully_expand_2(Pred,Out):-
176 safe_univ(Pred,[F|ARGS]),
177 eng_fully_expand_1_l(ARGS,NEWARGS),
178 safe_univ(Out,[F|NEWARGS]),!.
179
180eng_fully_expand_1_l([],[]):-!.
181eng_fully_expand_1_l([T|Term],[E|English]):-!,
182 eng_fully_expand_1(T,E),
183 eng_fully_expand_1_l(Term,English).
184
185
186best_nl_phrase(List,Sorted):-predsort(best_nl_phrase,List,Sorted).
187
189best_nl_phrase(Order,TStr1,TStr2):-
190 any_to_string(TStr1,Str1),string_length(Str1,L1),
191 any_to_string(TStr2,Str2),string_length(Str2,L2),
192 compare(Order,L1-Str1,L2-Str2).
193
194is_phrase_type(posNP).
195
196prologBuiltin(local_term_anglify/2).
197prologBuiltin(local_term_anglify_first/2).
198prologBuiltin(local_term_anglify_last/2).
200prologBuiltin(enter_term_anglify/2).
201prologBuiltin(term_anglify_np_last/2).
202
206
207enter_term_anglify(X,Y):-var(X),copy_term(X,Y),!.
208enter_term_anglify(X,Y):-findall(X-Y-Body,clause( mudTermAnglify(X,Y),Body),List),member(X-Y-Body,List),call(Body),!.
209enter_term_anglify(X,Y):-findall(X-Y-Body,clause( term_anglify_np(X,Y),Body),List),member(X-Y-Body,List),call(Body),!.
210enter_term_anglify(X,Y):-findall(X-Y-Body,clause( term_anglify_last(X,Y),Body),List),member(X-Y-Body,List),call(Body),!.
211enter_term_anglify(X,Y):-findall(X-Y-Body,clause( term_anglify_np_last(X,Y),Body),List),member(X-Y-Body,List),call(Body),!.
212enter_term_anglify(X,X).
213
214
215local_term_anglify_first(T,TA):-compound(T),loop_check(local_term_anglify(T,TA)),!.
217local_term_anglify_first(T,TA):-must(enter_term_anglify(T,TA)),!.
218
219
220
222local_term_anglify(Var,O):- var(Var),!,O=[ftCallable(Var)].
224
225local_term_anglify(posNP(P),English):- local_term_anglify_np(P,English).
226local_term_anglify(noun_phrase(P),English):- local_term_anglify_np(P,English).
227
228local_term_anglify(actNotice(Who,What),[posNP(Who),notices,What]).
229local_term_anglify(fN(Region,tRegion),[(String)]):- call_u(nameString(Region,String)),!.
230local_term_anglify(fN(Region,tRegion),[nameString1(String)]):- holds_t(nameString,Region,String),!.
231
232
233local_term_anglify([P|L],English):-!, local_term_anglify(P,PE),local_term_anglify(L,LE),!,flatten_append(PE,LE,English),!.
234
235local_term_anglify(HOLDS,English):-HOLDS=..[H,Pred,A|MORE],atom(Pred),is_holds_true(H),HOLDS2=..[Pred,A|MORE],!,local_term_anglify(HOLDS2,English).
236local_term_anglify(HOLDS,[A,verbFn(Pred)|MORE]):-HOLDS=..[H,Pred,A|MORE],is_holds_true(H),!.
237local_term_anglify(HOLDS,English):-HOLDS=..[H,Pred,A|MORE],is_holds_false(H),atom(Pred),HOLDS2=..[Pred,A|MORE],!,local_term_anglify(not(HOLDS2),English).
238local_term_anglify(HOLDS,[false,that,A,verbFn(Pred)|MORE]):-HOLDS=..[H,Pred,A|MORE],is_holds_false(H),!.
239local_term_anglify(not(HOLDS),[false,that,English]):-!,local_term_anglify(HOLDS,English).
240local_term_anglify(notFound(FNum,F,Type),[no,FNum,TypeC,'-s',for,FC]):-copy_term(notFound(F,Type),notFound(FC,TypeC)),ignore(TypeC=tCol),ignore(FC='whatever').
241local_term_anglify(NPO,String):-NPO=..[NP,Obj],is_phrase_type(NP),!,enter_term_anglify(fN(Obj,NP),String).
242
243local_term_anglify(fN(Obj,argIsaFn(_PathName,_NumTwo)),String):- enter_term_anglify(Obj,String),!.
244local_term_anglify(cmdresult(Cmd,Whatnot),["the","command","result","of",Cmd,"is",Whatnot]):-!.
245local_term_anglify(string(Obj),[String]):-on_x_fail(any_to_string(Obj,StringUQ)),atomics_to_string(['"',StringUQ,'"'],"",String).
247local_term_anglify(mudAtLoc(Obj,LOC),String):-eng_fully_expand( [fN(Obj,posNP),is,at,fN(LOC,posNP)],String).
248local_term_anglify(mudDescription(Obj,Term),[fN(Obj,posNP),"description","contains",":",string(Term)]).
249local_term_anglify(fN(Obj,X),String):- locationToRegion(Obj,Region), Obj \= Region, enter_term_anglify(fN(Region,X),String),!.
251local_term_anglify(fN(Obj,T),String):- local_term_anglify_np(Obj,T,String),!.
252
253local_term_anglify(done(Obj,Term),[fN(Obj,posNP),did,:,Term]).
254local_term_anglify(failed(Obj,Term),[fN(Obj,posNP),didnt,:,Term]).
255local_term_anglify(do(Obj,Term),[fN(Obj,posNP),begun,:,Term]).
256
257
259local_term_anglify(fN(Obj,T),String):- anglify_noun_known(Obj,T,String),!.
260
264
265
266term_anglify_np(Obj,Hint,String):-local_term_anglify_np(Obj,Hint,String).
267
268local_term_anglify_np(Obj,String):-isa(Obj,Isa),local_term_anglify_np(Obj,Isa,String),!.
269local_term_anglify_np(Obj,String):-local_term_anglify_np(Obj,ftTerm,String).
270
272local_term_anglify_np(Obj,Hint,String):- anglify_noun_known(Obj,Hint,String),!.
273local_term_anglify_np(Obj,vtDirection,Obj):- !.
274local_term_anglify_np(string(Obj),string,Obj):- !.
275local_term_anglify_np(Obj,string,Obj):- !.
276
277local_term_anglify_np_last(Obj,Hint,String):- anglify_noun_known(Obj,Hint,String),!.
278local_term_anglify_np_last(Obj,FT,String):- ttExpressionType(FT),correctFormatType(change(assert,_),Obj,FT,String),!.
279local_term_anglify_np_last(Obj,Type,[prolog(Obj)]):-ttExpressionType(Type),!.
280local_term_anglify_np_last(Obj,Type,["the",Type,ftCallable(Obj)]):-!.
281local_term_anglify_np_last(apathFn(Region,Dir),_,["a",fN(Dir,vtDirection),"-ern","way","from",fN(Region,posNP)]):-!.
282local_term_anglify_np_last(Obj,Type,[prolog(Obj),fN,Type]):-!.
283local_term_anglify_np_last(Obj,_,["the",noun,with,token,Obj]):-!.
284
285:-ain_expanded(==>prologBuiltin(anglify_noun_known,3)).
286
288anglify_noun_known(Obj,FT,String):- ttExpressionType(FT),correctFormatType(change(assert,_),Obj,FT,String),!.
289anglify_noun_known(StringO,_Hint, [StringO]).
290anglify_noun_known(Obj,_Hint,["right","here"]):- current_agent(Self),mudAtLoc(Self,Obj),!.
291anglify_noun_known(Obj,_Hint,["here"]):- current_agent(Self),req1(localityOfObject(Self,Obj)),!.
292anglify_noun_known(Obj,_Hint,StringO):- findall(String,holds_t(nameString,Obj,String),List),List\=[],sort_by_strlen(List,[StringO|_]),!.
295
297
298
299
300detWithSpace(WithSpace,String):-ddeterminer0(String),atom_concat(String,' ',WithSpace).
301detWithSpace(WithSpace,String):-ddeterminer1(String),atom_concat(String,' ',WithSpace).
302
303:-export(determinerRemoved/3). 304determinerRemoved(S0,Det,S):- fail,detWithSpace(WithSpace,String),string_concat(WithSpace,S,S0),string_lower(String,Det).
305
306:-export(query_description/1). 307query_description(mudDescription(I,S)):- is_asserted(mudDescription(I,S)).
308query_description(t(mudDescription,I,S)):- is_asserted(mudDescription(I,S));is_asserted(mudKeyword(I,S)).
309
310
311:-export(remove_description/1). 312remove_description(mudDescription(I,S)):- dmsg(trace_or_throw(remove_description(mudDescription(I,S)))).
313
314:-export(add_description/1). 315add_description(mudDescription(I,S)):-add_description(I,S).
316
317:-export(add_description/2). 318add_description(A,S0):-ainz(mudDescription(A,S0)),fail.
319add_description(A,S0):- atomic(S0),string_concat('actPunchingSomething ',S,S0),!,add_description(A,S).
321add_description(A,S0):-
322 any_to_string(S0,S),
323 atomic_list_concat(Words,' ',S),
324 atomic_list_concat(Sents,'.',S),!,
325 length(Words,Ws),
326 must(add_description(A,S,S0,Ws,Sents,Words)),!.
327
329add_description(A,S,_S0,Ws,_Sents,_Words):- Ws<3,
330 atomic_list_concat([K,V],': ',S),!,add_description_kv(A,K,V).
331
332add_description(A,S,_S0,Ws,_Sents,_Words):- Ws<3,
333 atomic_list_concat([K,V],'=',S),!,add_description_kv(A,K,V).
334
336add_description(A,_S,_S0,1,_,[Word]):-add_description_word(A,Word),!.
337
339add_description(A,S,S0,Ws,Sents,['actPunchingSomething',B|C]):-add_description(A,S,S0,Ws,Sents,[B|C]).
340add_description(A,S,S0,Ws,Sents,[Det,B|C]):-ddeterminer(Det,L),add_description(A,S,S0,Ws,Sents,[B|C]),ainz(determinerString(A,L)).
341add_description(A,S,S0,Ws,_Sents,_Words):-Ws>3,is_here_String(S),text_to_string(S0,String),!,ainz(descriptionHere(A,String)).
342add_description(A,_S,S0,_Ws,_Sents,_Words):- any_to_string(S0,String),ainz(mudDescription(A,String)).
343
344is_here_String(S):- atomic_list_concat_safe([_,is,_,"here",_],S).
345is_here_String(S):- atomic_list_concat_safe([_,"here"],S).
346is_here_String(S):- atomic_list_concat_safe([_,is,"here",_],S).
347
348
349ddeterminer1("A").
350ddeterminer1("An").
351ddeterminer1("The").
352
353ddeterminer0("a").
354ddeterminer0("an").
355ddeterminer0("the").
356
357ddeterminer(L,L):-ddeterminer0(L).
358ddeterminer(U,L):-string_lower(U,L),U\=L,!,ddeterminer0(L).
359
360add_description_word(A,Word):- string_upper(Word,Word),string_lower(Word,Flag),string_to_atom(Flag,Atom),atom_concat(flagged_,Atom,FAtom),ainz((isa(A,FAtom))).
361add_description_word(A,Word):- string_lower(Word,Word),ainz((mudKeyword(A,Word))).
362add_description_word(A,Word):- string_lower(Word,Lower),ainz((mudKeyword(A,Lower))).
363
364
365add_description_kv(A,K,V):- atom_concat('actPunchingSomething ',Key,K),!,add_description_kv(A,Key,V).
366add_description_kv(A,K,V):- atom_concat('+',Key,K),!,add_description_kv(A,Key,V).
367add_description_kv(A,K,V):-atom_to_value(V,Term),C=..[K,A,Term],show_load_call(ainz(C))