10
11:-ensure_loaded(library('programk/logicmoo_module_aiml_gmidx.pl')).
12:-ensure_loaded(library('programk/logicmoo_module_aiml_convertor.pl')).
13:-ensure_loaded(library('programk/logicmoo_module_aiml_cxt_path.pl')).
14
18callableInput(_Ctx,String,_Input,_Output):-traceIf(var(String)),fail.
19callableInput(Ctx,[S|Tring],Input,Output):- maplist(atomic,[S|Tring]),joinAtoms([S|Tring],' ',String),!,callableInput0(Ctx,String,Input,Output).
20callableInput(Ctx,String,Input,Output):-string(String),string_to_atom(String,Atom),!,callableInput0(Ctx,Atom,Input,Output).
21callableInput(Ctx,Atom,Input,Output):-callableInput0(Ctx,Atom,Input,Output).
22
23callableInput0(Ctx,[String],Input,Output):-!,callableInput(Ctx,String,Input,Output).
24callableInput0(_Ctx,NonAtom,_Input,_Output):- not(atom(NonAtom)),!,fail.
25
26callableInput0(_Ctx,Atom,_Input,result(Term,Vars)):- notrace(catch(atom_to_term(Atom,Term,Vars),_,fail)),
27 callable(Term),catch(callInteractive0(Term,Vars ,_,fail).
28callableInput0(Ctx,Atom,_Input,VotesO-Output):-atom_prefix(Atom,'@'),
29 30 locally(set_prolog_flag(debug,true),
31 withAttributes(Ctx,[],prolog_must(computeAnswer(Ctx,1,element(system,[],Atom),Output,VotesO)))),!.
32
33
37computeSRAIElement(Ctx,Votes,ATTRIBS,Input0,Output,VotesO):-
38 withAttributes(Ctx,ATTRIBS, ((
39 computeSRAIElement0(Ctx,Votes,ATTRIBS,Input0,OutputM,VotesOM),
40 computeTemplateOutput(Ctx,VotesOM,OutputM,Output,VotesO)))),!.
41
42computeSRAIElement0(Ctx,Votes,ATTRIBS,Input0,Output,VotesO):-
43 prolog_must(ground(Input0)),!,
44 flatten([Input0],Input),
45 thread_local_flag(sraiDepth,SraiDepth,SraiDepth+1),
46 computeSRAIElement1(Ctx,Votes,SraiDepth,ATTRIBS,Input,Output,VotesO),
47 thread_local_flag(sraiDepth,_,SraiDepth),!.
48
49computeSRAIElement1(Ctx,Votes,SraiDepth,ATTRIBS,Input,Output,VotesO):-SraiDepth>1,!,evalSRAI(Ctx,Votes,SraiDepth,ATTRIBS,Input,Output,VotesO),!.
50computeSRAIElement1(Ctx,Votes,SraiDepth,ATTRIBS,Input,Output,VotesO):-catch(evalSRAI(Ctx,Votes,SraiDepth,ATTRIBS,Input,Output,VotesO),aiml_goto(Output,VotesO),thread_local_flag(sraiDepth,_,0)),!.
51
52
53evalSRAI(Ctx,Votes,SraiDepth,ATTRIBS,_Input,_Unusued,_VotesO):- SraiDepth>80,
54 getAliceMem(Ctx,bot,'infinite-loop-input',Output),!,VotesO is Votes * 0.8,
55 throw_aiml_goto(element(srai,ATTRIBS,Output),VotesO).
56 57
63
64
65evalSRAI(Ctx,Votes,_SraiDepth,ATTRIBS,[I|Input0],Output,VotesO):-atom(I),atom_prefix(I,'@'),!,
66 67 withAttributes(Ctx,ATTRIBS,prolog_must(computeAnswer(Ctx,Votes,element(system,ATTRIBS,[I|Input0]),Output,VotesO))),!.
68
69evalSRAI(Ctx,Votes,_SraiDepth,ATTRIBS,Input,Output,VotesO):-
70 prolog_must(var(SYM)),
71 prolog_must(peekNameValue(Ctx,ATTRIBS,['evalsrai','userdict','scope'],SYMPREV,'$value'(user))),
72 ifThen(var(SYM),evalsrai(SYM)),
73 nop(ignore(var(Proof))),
74 withAttributes(Ctx,['evalsrai'=SYM,proof=Proof],
75 ((
76 setup_call_cleanup(addInherit(SYM,SYMPREV),
77 ((
78 debugOnError(computeSRAI(Ctx,Votes,SYM,Input,MidIn,VotesM,Proof)),
79
80 computeSRAIStars(Ctx,ATTRIBS,Input,MidIn,VotesM,SYM,Proof,Output,VotesO))),
81 remInherit(SYM,SYMPREV)),
82 ifThen(nonvar(SYM),retractallSrais(SYM))))).
83
84
85computeSRAIStars(Ctx,ATTRIBS,Input,MidIn,VotesM,SYM,Proof,Output,VotesO):- fail,
86 prolog_must((nonvar(MidIn),
87 nonvar(SYM),
88 singletons([Ctx,ATTRIBS]),
89 nonvar(Proof))),
91 MidIn = Output,
92 VotesM = VotesO,
93 nop(debugFmt(computeSRAIStars(SYM,Input,Output))),
94 prolog_must((ground(Output),number(VotesO))),!
94.
95
96computeSRAIStars(Ctx,ATTRIBS,Input,MidIn,VotesM,SYM,Proof,Output,VotesO):-
97 prolog_must((nonvar(MidIn),
98 nonvar(SYM),
99 nonvar(Proof))),
100 setCtxValue(Ctx,'evalsrai',SYM),
101 102 computeElementMust(Ctx,VotesM,template,ATTRIBS,MidIn,MidIn9,VotesI9),
103 prolog_must(answerOutput(MidIn9,Mid9)),
104 debugFmt(evalSRAI(SYM,Input,MidIn,MidIn9,Mid9)),
105 prolog_must(computeAnswer(Ctx,VotesI9,Mid9,Output,VotesO)),
106 prolog_must((ground(Output),number(VotesO))),!.
107
108 evalsrai(SYM):-gensym('evalsrai',SYM).
109
113
114computeSRAI(_Ctx,_Votes,_SYM,[],_,_,_Proof):- !,atrace,fail.
115
116computeSRAI(Ctx,Votes,SYM,Input,Result,VotesO,Proof):-
117 getAliceMem(Ctx,'bot','me',Robot),
118 getAliceMem(Ctx,'bot','you',User),
119 ifThen(var(SYM),evalsrai(SYM)),
120 getConversationThread(Ctx,User,Robot,ConvThread),
121 prolog_must(computeSRAI0(Ctx,Votes,ConvThread,SYM,Input,Result,VotesO,Proof)).
122
123getConversationThread(Ctx,User,Robot,ConvThread):-
124 ConvThread = fromTo(User,Robot),
125 setCtxValue(Ctx,'convthread',ConvThread),!.
126
127computeSRAI0(Ctx,Votes,ConvThread,SYM,Input,Result,VotesO,Proof):-
128 computeInnerTemplate(Ctx,Votes,Input,NewIn,VotesM),NewIn \== Input,!,
129 computeSRAI0(Ctx,VotesM,ConvThread,SYM,NewIn,Result,VotesO,Proof),!.
130
131computeSRAI0(Ctx,Votes,ConvThread,SYM,Input,Result,VotesO,Proof):- not(is_list(Input)),compound(Input),
132 answerOutput(Input,InputO),Input\==InputO,!,atrace,
133 computeSRAI0(Ctx,Votes,ConvThread,SYM,InputO,Result,VotesO,Proof).
134
135computeSRAI0(Ctx,Votes,ConvThread,SYM,Input,Result,VotesO,Proof):- not(is_list(Input)),compound(Input),
136 computeAnswer(Ctx,Votes,Input,InputO,VotesM),Input\==InputO,!,atrace,
137 computeSRAI0(Ctx,VotesM,ConvThread,SYM,InputO,Result,VotesO,Proof).
138
139computeSRAI0(Ctx,Votes,ConvThread,SYM,Input,Result,VotesO,Proof):-
140 Each = (OutputLevel - e(VotesM,Result,Proof)),
141 Each2Test = (_ - e(_,Result2Test,_)),
142 Call = computeSRAI2(Ctx,Votes,ConvThread,SYM,Input,Result,VotesM,Proof,OutputLevel),
143 copy_term(Each:Call,EachFound:CallFound),
144 findall(EachFound:CallFound, CallFound, FOUND),
145 FOUND=[_|_],
146 memberchk(Each2Test:_,FOUND),
147 nonvar(Result2Test),
148 sort(FOUND,ORDER),!,
149 150 member(Each:Call,ORDER),
151 prolog_must(nonvar(Result)),
152 debugFmt(computeSRAI(Input,SYM,Each)),
153 VotesO is VotesM * 1.1
153.
154
155computeSRAI0(_Ctx,Votes,ConvThread,SYM,Input,Result,VotesO,Proof):- !, VotesO is Votes * 0.7,
156 Result = ['I',heard,you,think,SYM,and,'say:'|Input],
157 Proof = result(Result,failed_computeSRAI2(Votes,Input,ConvThread)),
158 debugFmt(Proof),!.
159
161
163computeSRAI0(Ctx,Votes,ConvThread,SYM,[B|Flat],[B|Result],VotesO,Proof):- fail,
164 computeSRAI2(Ctx,Votes,ConvThread,SYM,Flat,Result,VotesO,Proof,_PostOutputLevel3),prolog_must(nonvar(Result)).
165
166checkSym(_SYM).
167
168subclassMakeUserDict(Ctx,UserDict,SYM):-debugFmt(x(subclassMakeUserDict(Ctx,UserDict,SYM))),addInherit(UserDict,SYM).
169
170convThreadDict(_Ctx,ConvThreadHint,ConvThread):-answerOutput(ConvThreadHint,First),unlistify(First,ConvThread),!.
171
172computeSRAI222(CtxIn,Votes,ConvThreadHint,SYM,Pattern,Compute,VotesO,ProofOut,OutputLevel):-
173 prolog_mustEach((
174 175 prolog_must(current_value(CtxIn,'evalsrai',SYM2)),
176 ifThen(var(SYM),SYM=SYM2),
177 ifThen(SYM\==SYM2,debugFmt(syms(SYM\==SYM2))),
178 convThreadDict(Ctx,ConvThreadHint,ConvThread),
179 getCategoryArg(Ctx,'template',Out, _Out_ ,CateSig),!,
180 getAliceMemOrSetDefault(CtxIn,ConvThread,SYM,'topic',Topic,['Nothing']),
181 getAliceMemOrSetDefault(CtxIn,ConvThread,SYM,'userdict',UserDict,'user'),
182 183 subclassMakeUserDict(CtxIn,UserDict,SYM),
184 getAliceMemOrSetDefault(CtxIn,ConvThread,SYM,'that',That,['Nothing']),
185
186 PreTopic = ignore(CtxIn=Ctx),PreTopic,
187 TTP = topicThatPattern(Topic,That,Pattern),
188 debugFmt(TTP),!,
189 traceIf(not(ground(TTP))),
190 must_be_openCate(CateSig),!,
191
194
195 UNIF= topicThatPattern(Ctx,Topic,That,Pattern,PreTopic,Out,CateSig,OutputLevel,StarSets_All,ClauseNumber,CommitTemplate),
196 singletons([ClauseNumber]),
197 findall(UNIF,UNIF,UNIFS),!,
198 traceIf(UNIFS=[]),
199 200 member(UNIF,UNIFS),
201 once((
202 retractallSrais(SYM),
203 prolog_must(CommitTemplate),
204 prolog_must(nonvar(Out)),
205 cateStrength(CateSig,Mult),
207 VotesO is Votes * Mult,
208 makeWithAttributes(StarSets_All,Out,Compute),
209 210 MoreProof = [topicThatPatternOutput(Topic,That,Pattern,Out)],
211 ProofOut=..[proof,Compute|MoreProof])
211)
211))
211)
211.
212
213
214clauseRef(_CateSig,0):-!.
215clauseRef(CateSig,Pattern:Template):-arg(6,CateSig,Pattern),arg(11,CateSig,Template),!.
216clauseRef(CateSig,ClauseNumber):-trace,clause(CateSig,true,ClauseNumber).
217clauseRef(_CateSig,-1):-!.
218
219savedParts(Save,PreTopic,CommitTemplate,OutputLevel,StarSets_All,Out,ClauseNumber,CateSig):-
220 Save = OutputLevel - StarSets_All - Out - ClauseNumber - CateSig - CommitTemplate - PreTopic.
221
222starSetsAll(Ctx,Topic,That,Pattern,Save,PreTopic):-
223 savedParts(Save,PreTopic,_CAfterPattern,OutputLevel,StarSets_All,Out,ClauseNumber,CateSig),
224 getCategoryArg(Ctx,'template',Out, _Out_ ,CateSig),
225 functor(CateSig,CateSigFunctor,_Args),
226 OutputLevel = OutputLevel1 - OutputLevel2 - OutputLevel3,!,
227
228 229 cate_match(Ctx,CateSigFunctor,'pattern',Pattern,CateSig,_MatchPattern,StarSets_Pattern,OutputLevel3),
230 call(CateSig),
231 clauseRef(CateSig,ClauseNumber), 232 once(( cate_match(Ctx,CateSigFunctor,'topic',Topic,CateSig,_MatchTopic,StarSets_Topic,OutputLevel1),
233 cate_match(Ctx,CateSigFunctor,'that',That,CateSig,_MatchThat,StarSets_That,OutputLevel2),
234 combineStarSets(StarSets_Topic,StarSets_That,StarSets_Pattern,StarSets_All) )).
235
236combineStarSets(StarSets_Topic,StarSets_That,StarSets_Pattern,StarSets_All):-
237 append(StarSets_Topic,StarSets_That,StarSets_TopicThat),
238 append(StarSets_Pattern,StarSets_TopicThat,StarSets_All),!.
239
240cate_match(Ctx,CateSigFunctor,StarName,TextPattern,CateSig,MatchPattern,StarSets,OutputLevel):-
241 getCategoryArg1(Ctx,StarName,MatchPattern,_StarNumber,CateSig),!,
242 argNFoundGenerate(CateSigFunctor,StarName,MatchPattern,_IndexPattern,TextPattern),
243 make_star_binders(Ctx,StarName,1,TextPattern,MatchPattern,OutputLevelInv,StarSets),OutputLevel is 1/OutputLevelInv.
244
245ctrace2:-atrace.
246
248checkStarSets(_StarSets). 249
250
251argNFoundGenerate(CateSigFunctor,StarName,MatchPattern,IndexPattern,Nothing):-meansNothing(Nothing,_),!,argNFound(CateSigFunctor,StarName,MatchPattern,IndexPattern).
252argNFoundGenerate(CateSigFunctor,StarName,MatchPattern,IndexPattern,TextPattern):-textPatternToMatchPatternTest(TextPattern,IndexPattern),argNFound(CateSigFunctor,StarName,MatchPattern,IndexPattern),nop(traceIf(not(textPatternToMatchPattern(TextPattern,IndexPattern)))).
254
255argNFoundGenerate(_CateSigFunctor,pattern,MatchPattern,IndexPattern,TextPattern):-textPatternToMatchPattern(TextPattern,IndexPattern),cid_pattern(_,IndexPattern),fromIndexableSArg0(IndexPattern,MatchPattern).
256argNFoundGenerate(_CateSigFunctor,that,MatchPattern,IndexPattern,TextPattern):-textPatternToMatchPattern(TextPattern,IndexPattern),cid_that(_,IndexPattern),fromIndexableSArg0(IndexPattern,MatchPattern).
257argNFoundGenerate(_CateSigFunctor,topic,MatchPattern,IndexPattern,TextPattern):-textPatternToMatchPattern(TextPattern,IndexPattern),cid_topic(_,IndexPattern),fromIndexableSArg0(IndexPattern,MatchPattern).
258
259
260toTAtom(Text,Text):-atom(Text),!.
261toTAtom(Text,Atom):-number(Text),atom_number(Atom,Text),!.
262toTAtom(Text,Atom):-trace,atom_number(Atom,Text).
263
264textPred(element(A,B,C),element(A,B,C)):-!.
265textPred(Text,Pred):-toTAtom(Text,Atom),toLowercase(Atom,Pred).
266
267
268textPatternToMatchPattern([Text],MatchPattern):-textPred(Text,Pred),!,member(MatchPattern,[Pred,*,'_']).
269textPatternToMatchPattern([Text,_P|_Attern],MatchPattern):-textPred(Text,Pred),functor(MatchPattern,Pred,1).
270textPatternToMatchPattern([_Text|Pattern],MatchPattern):-member(T,Pattern),textPred(T,Pred),functor(MatchPattern,Pred,2).
271textPatternToMatchPattern(_TextPattern,'_').
272textPatternToMatchPattern(_TextPattern,'*').
273
275textPatternToMatchPatternTest(_TextPattern,_).
276
283topicThatPattern(Ctx,Topic,That,Pattern,PreTopic,Out,CateSig,OutputLevel,StarSets_All,ClauseNumber,CommitTemplate):- useNewCateSigSearch_broken_now,
284 prolog_mustEach((
285 debugFmt(debugWarn(useNewCateSigSearch_broken_now)),
286 CommitTemplate = (nop(CateSig),prolog_must(PreTopic)),
287 savedParts(Save,PreTopic,CommitTemplate,OutputLevel,StarSets_All,Out,ClauseNumber,CateSig),
288 findall(Save,starSetsAll(Ctx,Topic,That,Pattern,Save,PreTopic),AllCateSig),
289 prolog_must(AllCateSig=[_|_]),
290 sort(AllCateSig,SetOfAllCateSig),!,
291 292 member(Save,SetOfAllCateSig))).
295topicThatPattern(Ctx,Topic,That,Pattern,PreTopic,Out,CateSig,OutputLevel,StarSets_All,ClauseNumber,CommitTemplate):-
296 prolog_mustEach((
297 traceIf(useNewCateSigSearch_broken_now),
298 OutputLevel = OutputLevel1 - OutputLevel2 - OutputLevel3,!,
299 CPreTopic = true,
300 make_preconds_for_match(Ctx,'topic',Topic,CateSig,PreTopic,AfterTopic,CPreTopic,CAfterTopic,Out,MinedCates,EachMatchSig_Topic,StarSets_Topic,OutputLevel1),
301 make_preconds_for_match(Ctx,'that',That,CateSig,AfterTopic,AfterThat,CAfterTopic,CAfterThat,Out,MinedCates,EachMatchSig_That,StarSets_That,OutputLevel2),
302 make_preconds_for_match(Ctx,'pattern',Pattern,CateSig,AfterThat,FindPatternGoal,CAfterThat,CommitTemplate,Out,MinedCates,EachMatchSig_Pattern,StarSets_Pattern,OutputLevel3),
303 prolog_must((var(Out),var(OutputLevel1),var(OutputLevel2),var(OutputLevel3))),
304 must_be_openCate(CateSig))),
305 prolog_mustEach((
306 307 atLeastOne(call((FindPatternGoal,
308
313 CateSig))),
314 clauseRef(CateSig,ClauseNumber),
315 singletons([EachMatchSig_Topic,EachMatchSig_That,EachMatchSig_Pattern]),
316 combineStarSets(StarSets_Topic,StarSets_That,StarSets_Pattern,StarSets_All))).
317
318savedSetPatterns(LSP,OutputLevel,StarSets,MatchPattern):- LSP = lsp(OutputLevel,StarSets,MatchPattern).
319
320make_preconds_for_match(Ctx,StarName,TextPattern,CateSig,PrecondsSearch,PostcondsSearch,PrecondsCommit,PostcondsCommit,Out,MinedCates,EachMatchSig,StarSets,
321 OutputLevel):-
322 make_prepost_conds(Ctx,StarName,TextPattern,CateSig,FindPatternGoal,CommitTemplate,Out,MinedCates,EachMatchSig,StarSets,OutputLevel),
323 combineConjCall(PrecondsSearch,FindPatternGoal,PostcondsSearch),
324 combineConjCall(PrecondsCommit,CommitTemplate,PostcondsCommit).
325
327make_prepost_conds(Ctx,StarName,TextPattern,CateSig,FindPatternGoal,CommitTemplate,Out,MinedCates,EachMatchSig,StarSets,OutputLevel):-
328 prolog_mustEach((
329 CommitTemplate = true,
330 generateMatchPatterns(Ctx,StarName,Out,TextPattern,CateSig,MinedCates,EachMatchSig),
331 savedSetPatterns(LSP,OutputLevel,StarSets,MatchPattern),
332 getCategoryArg(Ctx,StarName,MatchPattern,Out,CateSig),
333 FindPatternGoal = ( member(LSP,EachMatchSig) )),!.
334
335contextUsedClaused(Ctx,CateSig,ClauseNumber):- fail, contains_term(Ctx,CateSig)->not(contains_term(Ctx,ClauseNumber));not(contains_term(Ctx,ClauseNumber)).
336
337makeWithAttributes([],Proof,Proof):-!.
338makeWithAttributes(StarSets_All,Proof,withAttributes(StarSets_All,Proof)).
339
340retractallSrais(SYM):-prolog_must(nonvar(SYM)),ifThen(nonvar(SYM),(retractall(dict(SYM,_,_)))),fail.
341retractallSrais(_SYM):-!.
342
343cateStrength(_CateSig,1.1):-!.
344
345computeSRAI2(Ctx,Votes,ConvThread,_SYM1,Pattern,Out,VotesO,ProofOut,OutputLevel):- !,
346 computeSRAI222(Ctx,Votes,ConvThread,_SYM2,Pattern,Out,VotesO,ProofOut,OutputLevel)
346.
347
348getCategoryArg(Ctx,StarName,MatchPattern,Out,CateSig):-
349 prolog_must(getCategoryArg0(Ctx,StarName,MatchPattern,Out,CateSig)),!.
350
351getCategoryArg0(Ctx,StarName,MatchPattern,_Out,CateSig):-atomic(StarName),!,
352 getCategoryArg1(Ctx,StarName,MatchPattern,_StarNumber,CateSig),!.
353
354getCategoryArg0(Ctx,FAB,OutAOutB,Out,CateSig):- FAB=..[F,A,B],
355 getCategoryArg(Ctx,A,OutA,Out,CateSig),!,
356 getCategoryArg(Ctx,B,OutB,Out,CateSig),!,
357 OutAOutB=..[F,OutA,OutB].
358
359getCategoryArg1(_Ctx,StarName,MatchPattern,StarNumber,CateSig):-
360 prolog_must(aimlCateSig(CateSig)),
361 aimlCateOrder(Order),
362 nth1(StarNumber,Order,StarName),
363 prolog_must(arg(StarNumber,CateSig,MatchPattern)),!.
364
365
366meansNothing(Var,_Nothing):-var(Var),!,aiml_error(meansNothing(var(Var))),!.
367meansNothing([Atomic],Nothing):-nonvar(Atomic),!,meansNothing(Atomic,Nothing),!.
368meansNothing(N,['Nothing']):-member(N,[[],'Nothing']),!.
369meansNothing(Atom,['Nothing']):-atom(Atom),!,fail.
370meansNothing(InputNothing,InputPattern):-prolog_must((ground(InputNothing),var(InputPattern))),meansNothing0(InputNothing,InputPattern),!.
371
372meansNothing0([Atom],Out):-!,meansNothing0(Atom,Out).
373meansNothing0('_',['Nothing']).
374meansNothing0('*',['Nothing']).
375
376combineConjCall(A,B,C):-A==true,!,C=B.
377combineConjCall(A,B,C):-B==true,!,C=A.
378combineConjCall(A,B,C):- C = (A,B).
379
380addToMinedCates(_MinedCates,_CateSig):-!.
381addToMinedCates(MinedCates,CateSig):-prolog_must(ground(CateSig)),append(_,[CateSig|_],MinedCates),!.
382addToMinedCates(MinedCates,CateSig):-atrace,var(MinedCates),!,MinedCates=[CateSig|_].
383
384notSingletons(_Singleton_List):-!.
385
389generateMatchPatterns(_Ctx,_StarName,_Out,_InputNothing,_CateSig,_NC_MinedCates,EachMatchSig):-nonvar(EachMatchSig),trace,!. 390
391generateMatchPatterns(Ctx,StarName,Out,InputNothing,CateSig,NC_MinedCates,EachMatchSig):- fail,
392 hotrace(meansNothing(InputNothing,InputPattern)),
393 InputNothing\==InputPattern,!,
394 generateMatchPatterns(Ctx,StarName,Out,InputPattern,CateSig,NC_MinedCates,EachMatchSig).
395
396generateMatchPatterns(Ctx,StarName,Out,InputNothing,CateSig,_NC_MinedCates,EachMatchSig):- fail,
397 hotrace(meansNothing(InputNothing,_InputPattern)),!,
398 traceIf(InputNothing\==['Nothing']),
399 must_be_openCate(CateSig),
400 getCategoryArg(Ctx,StarName,'*',Out,CateSig),
401 prolog_must(EachMatchSig=[_|_]),
402 must_be_openCate(CateSig),!.
405generateMatchPatterns(Ctx,StarName,Out,InputPattern,CateSigIn,MinedCates,SetOfEachMatchSig):- useIndexPatternsForCateSearch,
406 prolog_mustEach((
407 copy_term(CateSigIn,CateSig),
408 CateSigIn=CateSig,
409 functor(CateSig,CateSigFunctor,_Args),
410 must_be_openCate(CateSig),
411 getCategoryArg(Ctx,StarName,IndexPattern,Out,CateSig),
412 savedSetPatterns(LSP,OutputLevel,StarSets,IndexPattern),
413 findall(LSP,
414 (argNFoundGenerate(CateSigFunctor,StarName,MatchPattern,IndexPattern,InputPattern),
415 416 canMatchAtAll_debug(Ctx,StarName,InputPattern,MatchPattern,OutputLevel,StarSets)),
417 EachMatchSig),
418 prolog_must(EachMatchSig=[_|_]),
419 sort(EachMatchSig,SetOfEachMatchSig),
420 prolog_must(debugFmtList([
421 starName = StarName,
422 423 setOfEachMatchSig=SetOfEachMatchSig,
424 eachMatchSig=EachMatchSig,
425 matchPattern=MatchPattern,
426 minedCates=(MinedCates),
427 cateSig=CateSig
428 ])))),!.
432generateMatchPatterns(Ctx,StarName,Out,InputPattern,CateSig,_MinedCates,EachMatchSig):- ifThen(useIndexPatternsForCateSearch,atrace),
434 must_be_openCate(CateSig),
435 copy_term(CateSig,CateSigC),!,
436 getCategoryArg(Ctx,StarName,MatchPattern,Out,CateSigC),
437 findall(MatchPattern,CateSigC,AllMatchSig),!,sort(AllMatchSig,SetOfEachMatchSig),!,
438 savedSetPatterns(LSP,OutputLevel,StarSets,MatchPattern),
439 findall(LSP,
440 (member(MatchPattern,SetOfEachMatchSig),
441 canMatchAtAll_debug(Ctx,StarName,InputPattern,MatchPattern,OutputLevel,StarSets)),
442 EachMatchSig),
443 444 prolog_must(EachMatchSig=[_|_]),
445 prolog_must(debugFmtList([
446 starName = StarName,
447 eachMatchSig(EachMatchSig),
448 setOfEachMatchSig=SetOfEachMatchSig,
449 eachMatchSig=EachMatchSig,
450 matchPattern=MatchPattern,
451 cateSig=CateSig
452 ]))
452.
453
457
458canMatchAtAll_debug(Ctx,StarName,InputPattern,MatchPattern,OutputLevel,StarSets):-
459 make_star_binders(Ctx,StarName,1,InputPattern,MatchPattern,OutputLevelInv,StarSets),checkStarSets(StarSets),!,OutputLevel is 1/OutputLevelInv ,
460 nop(debugFmt(pass_canMatchAtAll_debug(Ctx,StarName,InputPattern,MatchPattern,OutputLevel,StarSets))),!.
461
462canMatchAtAll_debug(Ctx,StarName,InputPattern,MatchPattern,_OutputLevel,_StarSets):-
463 nop(debugFmt(fail_canMatchAtAll_debug(Ctx,StarName,InputPattern,MatchPattern))),!,fail.
464
466consumeSkippables([],[]).
467consumeSkippables([Skipable|B],BB):- isIgnoreableWord(Skipable),!,consumeSkippables(B,BB).
468consumeSkippables(A,A).
469
470removeSkippables(A,A):-atomic(A),!.
471removeSkippables([Skipable|B],BB):- isIgnoreableWord(Skipable),!,removeSkippables(B,BB).
472removeSkippables([Skipable|B],[Skipable|BB]):- removeSkippables(B,BB).
473removeSkippables(A,A).
474
480make_star_binders(_Ctx,StarName,_N,InputPattern,MatchPattern,OutputLevel,StarSets):-
481 prolog_must(var(StarSets)),prolog_must(var(OutputLevel)),prolog_must(ground(StarName:InputPattern:MatchPattern)),fail.
482
483make_star_binders(Ctx,StarName,N,InputText,Indexical,WildValue,Pred):-
484 485 486 removeSkippables(Indexical,IndexicalChanged),
488 (Indexical==IndexicalChanged->
490 (removeSkippables(InputText,Text),!,make_star_binders0(Ctx,StarName,N,Text,Indexical,WildValue,Pred));
492 make_star_binders0(Ctx,StarName,N,InputText,Indexical,WildValue,Pred))
492,!
492.
493
505
506starMatch(Pattern,Text,StarSets):-make_star_binders(_Ctx,'t',1,Text,Pattern,_OutputLevelInv,StarSets).
507
508:-setLogLevel(make_star_binders0,none).
509
511make_star_binders0(_Ctx,_StarName,_N,L,R,1,[]):-R==[],consumeSkippables(L,LL),LL==[],!.
512make_star_binders0(_Ctx,_StarName,_N,L,R,1,[]):-L==[],consumeSkippables(R,RR),RR==[],!.
513
516
517
519make_star_binders0(Ctx,StarName,N,[Word1|B],[Word2|BB],CountO,StarSets):-
520 sameWords(Word1,Word2),!,make_star_binders0(Ctx,StarName,N,B,BB,Count,StarSets),CountO is Count + 1.
521
530make_star_binders0(Ctx,StarName,N,Word1B,Word2BB,CountO,StarSets):-append(B,[Word1],Word1B),append(BB,[Word2],Word2BB),
531 sameWords(Word1,Word2),!,make_star_binders0(Ctx,StarName,N,B,BB,Count,StarSets),CountO is Count + 1.
532
536
538make_star_binders0(_Ctx,StarName,N,InputText,WildCard,WildValue,[Pred]):-isStarOrWild(StarName,N,WildCard,WildValue,InputText,Pred),!,checkStarSets([Pred]).
539
541make_star_binders0(Ctx,StarName,N,InputText,[WildCard,M0|More],ValueO,[Pred|StarSets]):-isStarOrWild(StarName,N,WildCard,WildValue,SkipedSTAR,Pred),
542 (WildCard=='^'->SkipedSTAR=_;SkipedSTAR=[_|_]),append(SkipedSTAR,[M1|LeftMore],InputText),sameWords(M0,M1),N2 is N+1,
543 make_star_binders0(Ctx,StarName,N2,LeftMore,More,Value,StarSets),!,ValueO is WildValue + Value,checkStarSets([Pred|StarSets]).
544
546make_star_binders0(Ctx,StarName,N,[Match|B],[WildCard|BB],ValueO,[Pred|StarSets]):- isStarOrWild(StarName,N,WildCard,WildValue,Match, Pred),!,
547 N2 is N+1,
548 make_star_binders0(Ctx,StarName,N2,B,BB,Value,StarSets),!,ValueO is WildValue + Value,checkStarSets([Pred|StarSets]).
549
551make_star_binders0(Ctx,StarName,N,InputText,Indexical,WildValue,Pred):-
552 atom(Indexical),!,
553 make_star_binders0(Ctx,StarName,N,InputText,[Indexical],WildValue,Pred),checkStarSets([Pred]).
554
556make_star_binders0(Ctx,StarName,N,InputText,Indexical,WildValue,Pred):-
557 not(is_list(Indexical)),romIndexableSArg0(Indexical,LIST),LIST=[_|_],
558 make_star_binders0(Ctx,StarName,N,InputText,LIST,WildValue,Pred),checkStarSets([Pred]).
559
560
561
563make_star_binders0(Ctx,StarName,N,Skipable,BB,CountO,StarSets):-
564 skipablePhrase(Skipable,B),!,make_star_binders0(Ctx,StarName,N,B,BB,Count,StarSets),CountO is Count + 1.
565 566
567
568skipablePhrase([Skipable|B],B):-isIgnoreableWord(Skipable),!.
569skipablePhrase([Skip,'\b',Ble|B],[Skipable|B]):-joinAtoms([Skip,'\b',Ble],' ',Skipable),!.
570
571isIgnoreableWord(Skipable):-member(Skipable,['-','(',')',',','?','.','','\'',('"')]).
572isIgnoreableWord(Skipable):-isWhiteWord(Skipable).
573
574isWhiteWord(Skipable):-member(Skipable,[' ','\b','\n','']).
575
605starNameTransform(Star,StarStar):-starName(Star,StarStar),!.
606starNameTransform(StarName,StarName):-atom_concat(_,'star',StarName),!.
607starNameTransform(StarName,StarNameStar):-atom_concat(StarName,'star',StarNameStar),!.
608
609isStarOrWild(StarName,N,[StarNameText],WildValue,InputText,Pred):-nonvar(StarNameText),!,isStarOrWild(StarName,N,StarNameText,WildValue,InputText,Pred),!.
610
611isStarOrWild(StarName,_N,WildCardText,WildValue,InputText,Pred):- isWildCard(StarName,WildCardText,WildValue,InputText,Pred),!.
612isStarOrWild(StarName,N,StarNameText,WildValue,InputText,StarNameStarN=InputText):-
613 isStar(StarName,StarNameText,WildValue),!,starNameTransform(StarName,StarNameStar),atom_concat(StarNameStar,N,StarNameStarN),!,traceIf(isStarValue(InputText)).
614
615isWildCard(StarName,Wild,1,InputText,call(sameWCBinding(StarName,Wild,InputText))):- not(is_list(Wild)),compound(Wild),!. 616
617requireableWord(StarName,M):-not(isOptionalOrStar(StarName,M)).
618
619isOptionalOrStar(_StarName,M):-not(atom(M)),!,atrace.
620isOptionalOrStar(StarName,M):-isStar2(StarName,M),!.
621
627isStar2(StarName,StarNameText):-isStar(StarName,StarNameText,_Order),!.
628isStar(StarName,StarNameText,WildValue):-not(ground(StarNameText)),atrace,debugFmt(isStar(StarName,StarNameText,WildValue)),!,fail.
629isStar(StarName,[StarNameText],WildValue):-isStar(StarName,StarNameText,WildValue),!.
630isStar(StarName,element(StarName,_,_),0.8).
631isStar(StarName,star(StarName,_,_),0.8).
633isStar(_StarName,'*',0.3).
634isStar(_StarName,'^',0.8).
635isStar(_StarName,'_',0.8).
637
638
639must_be_openCate(_CateSig):-!.
640must_be_openCate(CateSig):- prolog_must(hotrace((((nonvar(CateSig),not(ground(CateSig)),must_be_openCate0(CateSig)))))),!.
641must_be_openCate0(CateSig):- arg(_,CateSig,Arg),must_be_openCateArgs(Arg,CateSig),fail.
642must_be_openCate0(_CateSig):-!.
643
644must_be_openCateArgs(Arg,_CateSig):-var(Arg),!.
645must_be_openCateArgs('*',_CateSig):-!.
646must_be_openCateArgs(List,CateSig):-atrace, throw(List:CateSig),!.
647
648starSets(Ctx,List):-prolog_must((mapsome_openlist(starMust0,List),mapsome_openlist(starMust1(Ctx),List),mapsome_openlist(starMust2,List))),!.
649
650star_flag(Flag,Out,In):- starNameTransform(Flag,StarFlag), flag(StarFlag,Out,In),!. 651
652endOfList(EndOfList):-(var(EndOfList);atomic(EndOfList)),!.
653
654starMust0(StarName=_):-star_flag(StarName,_,1).
655starMust1(Ctx,StarName=Value):-starSet(Ctx,StarName,Value).
656starMust2(call(Call)):-!,prolog_must(Call).
657starMust2(_Skip).
658
659starSet(Ctx,StarNameI,Pattern):-
660 starName(StarNameI,StarName),
661 ignore((nop(var(N)),star_flag(StarName,N,N))),
662 traceIf(isStarValue(Pattern)),
663 getDictFromAttributes(Ctx,'evalsrai',[],Dict),
664 prolog_must(Dict\==user),
665 atom_concat(StarName,N,StarNameN),
666 prolog_must(not((getAliceMemComplete(Ctx,Dict,StarNameN,Old),debugFmt(getAliceMemComplete(Ctx,Dict,StarNameN,Old))))),
667 setAliceMem(Ctx,Dict,StarNameN,Pattern),!,star_flag(StarName,NN,NN+1).
668
671
673isStar0(X):-var(X),!,aiml_error(isStar0(X)).
674isStar0('*').
675isStar0('_').
676
677sameWords(Word1,Word2):-atom(Word1),atom(Word2),atoms_match0(Word1,Word2).
678 atoms_match0(Word1,Word2):- (isStar0(Word1);isStar0(Word2)),!,fail.
679 atoms_match0(Word1,Word1):-!.
680 atoms_match0(Word1,Word2):-literal_atom(Word1,WordO),literal_atom(Word2,WordO),!