15:- include(prologmud(mud_header)). 16:- expects_dialect(pfc). 17
18:- ensure_loaded(library(instant_prolog_docs)). 19
20:- virtualize_source_file. 21
22:-export((
23 parse_agent_text_command/5,
24 parse_agent_text_command_0/5,
25 objects_match/3,
26 match_object/2,
27 object_string/2,
28 save_fmt_a_0/2,
29 save_fmt_a/2,
30 31 parseIsa//2,
32 get_agent_text_command_0/4,
33 phrase_parseForTypes_9//2,
34 guess_nameStrings/2,
35 parseForTypes//
36 2)). 37
39
40:- if(false). 41:- set_prolog_flag(gc,true). 42:- trim_stacks. 43:- garbage_collect_atoms.
44:- garbage_collect_clauses. 45:- garbage_collect. 46:- statistics. 48:- endif. 49
50some_term_to_atom(Term,Atom):- must(\+ is_list(Term)), term_to_atom(Term,Atom).
51
55:-export(get_agent_text_command/4). 56:-export(get_agent_text_command_0/4). 57
58get_agent_text_command(Agent,VERBOrListIn,AgentR,CMD):-
59 on_x_debug(loop_check(get_agent_text_command_0(Agent,VERBOrListIn,AgentR,CMD),fail)).
60
61get_agent_text_command_0(Agent,ListIn,AgentR,CMD):-
62 (is_list(ListIn) -> UseList=ListIn ; UseList=[ListIn]),
63 call_no_cuts(baseKB:agent_text_command(Agent,UseList,AgentR,CMD)).
64
65
66want_more_question(G):-call(G),!.
67
68% ===========================================================
69% PARSE command
70% ===========================================================
71:-ain((==>baseKB:type_action_info(tHumanControlled,actParse(tCol,ftListFn(ftString)),"Development test to parse some Text for a human. Usage: parse 'item' the blue backpack"))).
72
73baseKB:agent_command(_Gent,actParse(Type,StringM)):-
74 want_more_question(parse_for(Type,StringM,_Term,_LeftOver)).
75
76% ===========================================================
77% CMDPARSE command
78% ===========================================================
79:-ain((==>baseKB:type_action_info(tHumanControlled,actCmdparse(ftListFn(ftTerm)),"Development test to parse some Text for a human. Usage: cmdparse take the blue backpack"))).
80
81baseKB:agent_command(_Gent,actCmdparse(StringM)):- !, want_more_question(parse_for(ftAction,StringM,Term,LeftOver)),fmt('==>'(parse_for(StringM) , [Term,LeftOver])).
82
83% baseKB:mud_test("cmdparse test",...)
84
85
86% ===========================================================
87% parsetempl command
88% ===========================================================
89:-ain((==>baseKB:type_action_info(tHumanControlled,actParsetempl(ftListFn(ftTerm)),"Development test to see what verb phrase heads are found. (uses get_vp_templates/4) Usage: parsetempl who"))).
90
91
95baseKB:agent_text_command(Agent,[Result|List],Agent,actParsetempl(List)):- guess_nameStrings( actParsetempl, Result).
96
97
98baseKB:agent_command(Agent,actParsetempl(StringM)):-
99 to_word_list(StringM,[SVERB|ARGS]),
100 get_vp_templates(Agent,SVERB,ARGS,TEMPLATES),fmt(templates=TEMPLATES),
101 ignore((
102 parse_for(ftAction,StringM,Goal,LeftOver),
103 fmt([goal=Goal,lfto=LeftOver]))).
104
110
111parse_for(Type,StringM, Term):-parse_for(Type,StringM, Term, Out),Out==[].
112
113list_tail(_,[]).
114list_tail(String,LeftOver):-ground(String),to_word_list(String,List),length(List,L),!,between(1,L,X),length(LeftOver,X).
115
116:-export(parse_for/4). 117parse_for(Type,StringM,Term,LeftOver):-
118 to_word_list(StringM,String),
119 list_tail(String,LeftOver),
120 HOW = phrase(parseIsa(Type,Term),String,LeftOver),
121 fmt('parsing with ~q ~n.',[HOW]),
122 (on_x_debug(HOW)*->
123 fmt('Success! parse \'~q\' "~q" = ~q (leftover=~q) . ~n',[Type,String,Term,LeftOver]);
124 (fmt('No Success.~n',[]),!,fail)).
125
126meets_desc_spec(T,_L):- some_term_to_atom(T,S0),string_to_atom(S0,A),atomic_list_concat_catch([_,_|_],'mudBareHandDa',A),!,fail.
127meets_desc_spec(_,[]):-!.
128meets_desc_spec(S,[DS|SL]):-!,meets_desc_spec(S,DS),meets_desc_spec(S,SL),!.
129meets_desc_spec(S,From-To):-!, desc_len(S,Len),!, between(From,To,Len).
130meets_desc_spec(_,_).
131
132desc_len(S0,Region):- call(some_term_to_atom(S0,S)),
133 atomic_list_concat_catch(Words,' ',S),length(Words,Ws),atomic_list_concat_catch(Sents,'.',S),length(Sents,Ss),Region is Ss+Ws,!.
134
135
136:-export(objects_match_for_agent/3). 137objects_match_for_agent(Agent,Text,ObjList):-
138 objects_match_for_agent(Agent,Text,
139 [mudPossess(Agent,isThis),
140 isSame(mudAtLoc),
141 isSame(localityOfObject),tAgent,tItem,tRegion],ObjList).
142:-export(objects_match_for_agent/4). 143objects_match_for_agent(Agent,Text,Match,ObjList):- trace,
144 objects_for_agent(Agent,isOneOf([text_means(Agent,Text,isThis),
145 isAnd([isOneOf(Match),match_object(Text,isThis)])]),ObjList).
146
147
148text_means(Agent,Text,Agent):- string_equal_ci(Text,"self"),!.
149text_means(Agent,Text,Loc):- string_equal_ci(Text,"here"),where_atloc(Agent,Loc).
150text_means(Agent,Text,Region):- string_equal_ci(Text,"region"),where_atloc(Agent,Loc),locationToRegion(Loc,Region).
151text_means(_Agent,_Text,_Value):-fail.
152
153relates(Agent,Relation,Obj):-loop_check(relates_ilc(Agent,Relation,Obj),fail).
154relates_ilc(Agent,Relation,Obj):-text_means(Agent,Relation,Obj),!.
155relates_ilc(_ ,Relation,Obj):- atom(Relation),tCol(Relation),!,isa(Obj,Relation).
156relates_ilc(_ ,Relation,Obj):-contains_var(Relation,isThis),subst(Relation,isThis,Obj,Call),!,req1(Call).
157relates_ilc(Agent,isSame(Relation),Obj):- !, relates(Agent,Relation,Value),relates(Obj,Relation,Value).
158relates_ilc(Agent,Relation,Obj):- atom(Relation),!, prop(Agent,Relation,Obj).
159relates_ilc(_ ,Relation,Obj):-contains_var(Relation,Obj),!,req1(Relation).
160relates_ilc(Agent,Relation,Obj):-contains_var(Relation,Agent),append_term(Relation,Obj,Call),!,req1(Call).
161relates_ilc(Agent,Relation,Obj):-objects_for_agent(Agent,Relation,MatchList),MatchList\=[],!,member(MatchList,Obj).
162
163
164objects_for_agent(_Agent,isAnd([]),[]):-!.
165objects_for_agent(_Agent,isMost([]),[]):-!.
166objects_for_agent(_Agent,isOneOf([]),[]):-!.
167
168objects_for_agent(Agent,isOneOf([Possible|Relations]),MatchList):-!,
169 objects_for_agent(Agent,Possible,L1),
170 objects_for_agent(Agent,Relations,L2),
171 append(L1,L2,MatchListL),!,
172 list_to_set(MatchListL,MatchList),!.
173
174objects_for_agent(Agent,members(List,Relations),MatchList):-!, findall(Obj,(member(Obj,List),relates(Agent,Relations,Obj)),MatchListL),list_to_set(MatchListL,MatchList),!.
175
176objects_for_agent(Agent,isAnd([Possible|Relations]),MatchList):-!,
177 objects_for_agent(Agent,Possible,L1),
178 objects_for_agent(Agent,members(L1,Relations),MatchListL),
179 list_to_set(MatchListL,MatchList),!.
180objects_for_agent(Agent,Relation,MatchList):- findall(Obj, relates(Agent,Relation,Obj), MatchListL),list_to_set(MatchListL,MatchList),!.
181
182
183objects_match(Text,Possibles,MatchList):- findall(Obj,(member(Obj,Possibles),match_object(Text,Obj)), MatchList).
184
185:-dynamic(object_string/2). 186object_string(O,String):-nameString(O,String).
187object_string(O,String):-mudKeyword(O,String).
188
189nameString(O,S)==>mudKeyword(O,S).
190
192
194
238
267same_ci(A,B):-quietly((must((non_empty(A),non_empty(B))),any_to_string(A,StringA),any_to_string(B,StringB),!,string_ci(StringA,StringB))),!.
268
269match_object(S,Obj):-var(S),!,fail,freeze(S,match_object(S,Obj)).
270match_object(S,Obj):-var(Obj),!,fail,freeze(Obj,match_object(S,Obj)).
271match_object(S,Obj):-number(S),atom_number(A,S),!,match_object(A,Obj).
272match_object(S,Obj):-same_ci(S,Obj),!.
273match_object(S,Obj):-atomic(S),string_to_atom(S,ID),call_u(tKnownID(ID)),!,(var(Obj)->Obj=ID;same_ci(ID,Obj)).
274match_object(S,Obj):-name_text(Obj,S),!.
275match_object(S,Obj):-i_name(Obj,S),!.
276match_object([S],Obj):-!,match_object(S,Obj).
277match_object([S1|S],Obj):-match_object(S1,Obj),match_object(S,Obj),!.
279match_object(S,Obj):-to_case_breaks(Obj,List)->member(xti(Str,_),List),string_equal_ci(S,Str),!.
293:-nodebug(logicmoo(parser)). 294:-debug(logicmoo(parser)). 295
297dmsg_parserm(D):- dmsg_parserm('~N~q~n',[D]).
298dmsg_parserm(F,A):-ignore((debugging_logicmoo(logicmoo(parser)),dmsg(F,A))).
299
300
304
305
306must_atomics(A):-must(atomic(A)).
307
308destringify_arg(A,A).
309
310parse_agent_text_command(Agent,SVERB,Args,NewAgent,GOAL):- destringify_arg(SVERB,AVERB),SVERB \=@= AVERB,!,
311 parse_agent_text_command(Agent,AVERB,Args,NewAgent,GOAL).
312parse_agent_text_command(Agent,SVERB,Args,NewAgent,GOAL):- is_list(Args),maplist(destringify_arg,Args,AArgs),AArgs \=@= Args,!,
313 parse_agent_text_command(Agent,SVERB,AArgs,NewAgent,GOAL).
314parse_agent_text_command(Agent,SVERB,[],NewAgent,GOAL):-compound(SVERB),!,must((NewAgent=Agent,GOAL=SVERB)),!.
315parse_agent_text_command(_Agent,SVERB,ARGS,_,_):-slow_sanity((must(atomic(SVERB)),maplist(must_atomics,ARGS))),fail.
316
317parse_agent_text_command(Agent,SVERB,ARGS,NewAgent,GOAL):-
318 dmsg(parse_agent_text_command(Agent,SVERB,ARGS,NewAgent,GOAL)),
319 parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL),
320 dmsg_parserm(succeed_parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL)),!.
321
322parse_agent_text_command(Agent,VERB,[PT2|ARGS],NewAgent,GOAL):-
323 atomic_list_concat_catch([VERB,PT2],'_',SVERB),
324 parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL),!,
325 dmsg_parserm(special_succeed_parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL)),!.
326
327parse_agent_text_command(Agent,PROLOGTERM,[],Agent,actProlog(PROLOGTERM)):- nonvar(PROLOGTERM),predicate_property(PROLOGTERM,_),!.
328
329parse_agent_text_command(Agent,SVERB,ARGS,NewAgent,GOAL):-
330 dmsg(failed_parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL)),
331 debugging_logicmoo(logicmoo(parser)),
332 333 parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL),!.
334
335parse_agent_text_command(Agent,IVERB,ARGS,Agent,GOAL):-
336 ground(IVERB), string_to_atom(IVERB,VERB),GOAL=..[VERB|ARGS],!.
337
339parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL):-
340 call_no_cuts(baseKB:agent_text_command(Agent,[SVERB|ARGS],NewAgent,GOAL)),nonvar(NewAgent),nonvar(GOAL),!.
341
343parse_agent_text_command_0(Agent,SVERB,ARGS,NewAgent,GOAL):-
344 call_no_cuts(baseKB:agent_text_command(Agent,[VERB|ARGS],NewAgent,GOAL)),ground(GOAL),nonvar(VERB),
345 verb_matches(SVERB,VERB).
346
347parse_agent_text_command_0(Agent,SVERB,ARGS,Agent,GOAL):-
348 parse_agent_text_command_1(Agent,SVERB,ARGS,Agent,GOAL).
349
350parse_agent_text_command_0(Agent,IVERB,ARGS,NewAgent,GOAL):-
351 verb_alias_to_verb(IVERB,SVERB), IVERB\=SVERB,!,
352 parse_agent_text_command(Agent,SVERB,ARGS,NewAgent,GOAL).
353
354parse_agent_text_command_0(Agent,PROLOGTERM,[],Agent,actProlog(req1(PROLOGTERM))):- compound(PROLOGTERM),functor(PROLOGTERM,F,A),
355 mpred_prop(_,F,A,_),!.
356parse_agent_text_command_0(Agent,PROLOGTERM,[],Agent,actProlog(req1(PROLOGTERM))):- compound(PROLOGTERM),pfc_is_callable(PROLOGTERM),!.
357
358:-export(parse_agent_text_command_1/5). 360parse_agent_text_command_1(Agent,SVERB,ARGS,Agent,GOAL):-
361
362 parse_vp_real(Agent,SVERB,ARGS,GOALANDLEFTOVERS),
363 dmsg_parserm(parserm("GOALANDLEFTOVERS"=GOALANDLEFTOVERS)),
364 GOALANDLEFTOVERS \= [],
365 must(chooseBestGoal(GOALANDLEFTOVERS,GOAL)),
366 dmsg_parserm(parserm("chooseBestGoal"=GOAL)).
367
368
369==>baseKB:text_actverb("i",actInventory).
370==>baseKB:text_actverb("l",actLook).
371==>baseKB:text_actverb("lo",actLook).
372==>baseKB:text_actverb("s",actMove(vSouth)).
373==>baseKB:text_actverb("go",actMove).
374==>baseKB:text_actverb("where is",actWhere).
375% baseKB:text_actverb(["where","is"],actWhereTest).
376
377% remove nonstringed aliases
378:-ain(((baseKB:text_actverb(NonStr, Act), {\+ is_ftText(NonStr),convert_to_cycString(NonStr,EStr)}) ==>
379 baseKB:text_actverb(EStr, Act),
380 { ignore(call(call,retractall(( baseKB:text_actverb(NonStr, Act)) ))) } )).
381
382==>ttTypeType(ttCoercable).
383
384==>genls(ttStringType,ttCoercable).
385
386nameString(O,S):-nonvar(O),nonvar(S),nameString(O,SU),same_ci(S,SU).
387
388:- ain(((ttCoercable(StringType),argIsa(F,N,StringType),arity(F,A),
389 {functor(P,F,A),P,arg(N,P,NonStr),\+ isa(NonStr,StringType),coerce(NonStr,StringType,EStr),replace_arg(P,N,EStr,Q)})
390 ==>
391 ( \+ P,{coerce(NonStr,StringType,EStr)},Q))).
392
393:- dmsg(call(listing(baseKB:text_actverb/2))). 394
395
397
398:- must((clause_u(baseKB:text_actverb(S,actWhere))))
399 ->must(((argIsa(text_actverb,1,C);call_u(argQuotedIsa(text_actverb,1,C))),(isa(S,C);quotedIsa(S,C)))). 400
403
405
406verb_alias_to_verb(IVERB,SVERB):- baseKB:text_actverb(L,Look),verb_matches(L,IVERB),SVERB=Look,!.
407verb_alias_to_verb(IVERB,SVERB):- coerce(IVERB,vtVerb,SVERB), IVERB \= SVERB.
408
409subst_parser_vars(Agent,TYPEARGS,TYPEARGS_R):- subst(TYPEARGS,isSelfAgent,Agent,S1),where_atloc(Agent,Here),subst(S1,vHere,Here,TYPEARGS_R).
410
412verb_matches(SVERB,VERB):- samef(VERB,SVERB)*->true;name_text_matches(SVERB,VERB).
413
414name_text_matches(SVERB,VERB):-name_text(SVERB,SSTR),name_text(VERB,STR),same_ci(SSTR,STR),!.
415
416
417get_vp_templates(_Agent,SVERB,_ARGS,TEMPLATES):-
418 findall([VERB|TYPEARGS],
419 ((
420 get_all_templates(TEMPL),
421 422 423 TEMPL=..[VERB|TYPEARGS],
424 (verb_matches(SVERB,VERB)))),
425 TEMPLATES_FA),
426 427 predsort(mostIdiomatic,TEMPLATES_FA,TEMPLATES).
428
430parse_vp_real(Agent,SVERB,ARGS,Sorted):- locally_tl(infSkipFullExpand,parse_vp_real_no_arg_checking(Agent,SVERB,ARGS,Sorted)).
431parse_vp_real_no_arg_checking(Agent,SVERB,ARGS,Sorted):-
432 get_vp_templates(Agent,SVERB,ARGS,TEMPLATES),
433 dmsg_parserm(("TEMPLATES"= (orig([SVERB|ARGS]) = TEMPLATES))),
434 TEMPLATES \= [],
435 list_to_set(TEMPLATES,TEMPLATESSET),
436 findall(LeftOver-GOAL,
437 ((
438 member([VERB|TYPEARGS],TEMPLATESSET),
439 once(((subst_parser_vars(Agent,TYPEARGS,TYPEARGS_R),
440 subst_parser_vars(Agent,ARGS,ARGS_R)))),
441 dmsg_parserm(("parseForTypes"=phrase_parseForTypes(TYPEARGS_R,ARGS_R,GOODARGS,LeftOver))),
442 phrase_parseForTypes(TYPEARGS_R,ARGS_R,GOODARGS,LeftOver),
443 GOAL=..[VERB|GOODARGS])),
444 GOALANDLEFTOVERS_FA),
445 sort(GOALANDLEFTOVERS_FA,GOALANDLEFTOVERS),
446 predsort(bestParse,GOALANDLEFTOVERS,Sorted),!.
447
448chooseBestGoal([_LeftOver - GOAL],GOAL):-!.
449chooseBestGoal(GOALANDLEFTOVERS,GOAL):-
450 predsort(bestParse,GOALANDLEFTOVERS,Sorted),
451 dmsg_parserm(("Sorted"=Sorted)),
452 member(_LeftOver - GOAL,Sorted),!.
453
455mostIdiomatic(Order, Term1, Term2):-mostComplex(Order, Term1, Term2).
457mostComplex(Order, Term1, Term2):-complexity_count(Term1,Complexity1),complexity_count(Term2,Complexity2),compare(Order,Complexity2,Complexity1),Order \== '=' ,!.
458mostComplex(Order, Term1, Term2):-compare(Order,Term1,Term2).
459
460complexity_count(S,-1):-var(S).
461complexity_count(S,L):-string(S),!,string_length(S,L).
462complexity_count(S,1):-atomic(S),!.
463complexity_count([H|T],L):-!,complexity_count(H,HL),complexity_count(T,TL),L is HL+TL.
464complexity_count(S,L):-functor(S,_,A),S=..[_|ARGS],!,complexity_count(ARGS,AL),L is A+AL.
465
467bestParse(Order,LeftOver1-GOAL1,LeftOver2-GOAL2):-
468 length(LeftOver1,L1),length(LeftOver2,L2),
469 functor_safe(GOAL1,_,A1),functor_safe(GOAL2,_,A2),
470 must(once(bestParse(Order,LeftOver1-GOAL2,LeftOver1-GOAL2,L1,L2,A1,A2))).
471
472:-style_check(-singleton). 473
474bestParse(Order,LeftOver1-GOAL2,LeftOver1-GOAL2,L1,L2,A1,A2):-
475 compare(Order,L1,L2), Order \== '='.
476bestParse(Order,LeftOver1-GOAL2,LeftOver1-GOAL2,L1,L2,A1,A2):-
477 compare(Order,-A1,-A2), Order \== '='.
478bestParse(Order,LeftOver1-GOAL2,LeftOver1-GOAL2,L1,L2,A1,A2):-
479 compare(Order,GOAL1,GOAL2).
480
481:-style_check(+singleton). 482
483:- dynamic(name_text_compute_now/2). 484:-multifile(name_text_compute_now/2). 485:- export(name_text_compute_now/2). 486name_text_compute_now(Obj,Text):- name_text_cached(Obj,Text),!.
487name_text_compute_now(Obj,Text):- atomic(Obj),
488 guess_nameStrings(Obj,Text),!,
489 maybe_ain_nameString(Obj,Text).
490
491maybe_ain_nameString(Obj, Text):- name_text_cached(Obj,Text),!.
492maybe_ain_nameString(_Obj,Text):- Text=="",!,fail.
493maybe_ain_nameString(Obj, Text):- Obj=Text,!.
495maybe_ain_nameString(Obj,Text):- ain(nameString(Obj,Text)).
496
497:-multifile(name_text/2). 498:-dynamic(name_text/2). 499:-export(name_text/2). 500name_text(I,O):- nonvar(O),!,name_text(I,M),string_equal_ci(M,O).
501name_text(I,O):- nonvar(I),no_repeats(O,(name_text_compute_now(I,M),any_to_string(M,S), \+ empty_string(S), text_to_string(S,O))).
502
503
504name_text_cached(Obj,Text):-clause_b(nameString(Obj,Text)).
505name_text_cached(Obj,Text):-clause_b(mudKeyword(Obj,Text)).
506
507:- ain('==>'(prologBuiltin(name_text_compute_now(ftTerm,ftString)))). 508
509:- baseKB:import(logicmoo_util_strings:convert_to_cycString/2). 510
511guess_mudDescription(O,S):-guess_mudDescription_0(O,OS),!,convert_to_cycString(OS,S).
512guess_mudDescription_0([],_):-!,fail.
513guess_mudDescription_0('',_):-!,fail.
514guess_mudDescription_0("",_):-!,fail.
515guess_mudDescription_0(Name,Text):-string(Name),!,Name=Text.
516guess_mudDescription_0(Name,Text):-is_list(Name),!,
517 maplist(as_atom,Name,RealName),atomic_list_concat(RealName,Obj),!,guess_mudDescription_0(Obj,Text).
518guess_mudDescription_0(Name,Desc):- arity(Name,Int),integer(Int), \+ isa(Name,tCol),atomic(Name),make_summary([],Name,Desc).
519guess_mudDescription_0(Name,Desc):- atomic(Name),!,atom(Name),to_case_breaks(Name,TextT),
520 maplist(to_descriptive_name(Name),TextT,TextL),!,atomics_to_string(TextL,' ',Desc).
521
522guess_nameStrings(O,S):- guess_nameStrings_0(O,OS),must(nonvar(OS)),!,convert_to_cycString(OS,S),!,OS\=="".
523guess_nameStrings_0([],_):-!,fail.
524guess_nameStrings_0('',_):-!,fail.
525guess_nameStrings_0("",_):-!,fail.
526guess_nameStrings_0(Name,Text):-string(Name),!,Name=Text.
527guess_nameStrings_0(Name,Text):-is_list(Name),!,
528 maplist(as_atom,Name,RealName),atomic_list_concat(RealName,Obj),!,guess_nameStrings_0(Obj,Text).
529guess_nameStrings_0(Name,Text):-compound(Name),!, \+ is_ftVar(Name),Name=..[F,A|List],!,guess_nameStrings_0([F,A|List],Text).
530guess_nameStrings_0(Name,Text):-atom(Name),to_case_breaks(Name,ListN),to_case_breaks_trimed(Name,ListN,Text).
531
532to_case_breaks_trimed(Name,[xti(TextL,Class),xti(TextR,Class)|ListN],Text):-
533 maplist(to_descriptive_name(Name),[xti(TextL,Class),xti(TextR,Class)|ListN],Desc),
534 atomics_to_string(Desc,' ',Text),!.
535
536to_case_breaks_trimed(Name,[_|ListN],Text):- is_list(ListN),!,
537 maplist(to_descriptive_name(Name),ListN,Desc),
538 atomics_to_string(Desc,' ',Text).
539
540type_descriptive_name(_,Str,Str):-string(Str),!.
541type_descriptive_name(Name,xti(Atom,Class),Out):- !,Class\==digit,type_descriptive_name(Name,Atom,Out).
542type_descriptive_name(tCol,t,'First-Order').
543type_descriptive_name(tPred,Desc,Atom):-longer_sumry(Desc,Atom).
544type_descriptive_name(tCol,tt,'Second-Order').
545type_descriptive_name(tCol,vt,'Type-Class').
546type_descriptive_name(tCol,'Col','Class').
547type_descriptive_name(ftNonvar,'Fn','Function').
548type_descriptive_name(tFunction,'a','Prototypical').
549type_descriptive_name(tFunction,'i','Instance').
550type_descriptive_name(ftAtom,'i','Instance').
551type_descriptive_name(tCol,'Voprop','Verb-Object Properties').
552type_descriptive_name(ftNonvar,Pefix,Desc):-
553 type_prefix(Pefix,TypeName),guess_nameStrings(TypeName,Desc).
554
555
556to_descriptive_name(For,Desc,Atom):- type_descriptive_name(Type,Desc,Atom),isa(For,Type),!.
557to_descriptive_name(_For,Pefix,Desc):- call_u(type_prefix(Pefix,TypeName)), guess_nameStrings(TypeName,Desc).
558to_descriptive_name(For,xti(Pefix,lower),Desc):-!,to_descriptive_name(For,Pefix,Desc).
559to_descriptive_name(_For,Desc,Atom):- longer_sumry(Desc,Atom),!.
560to_descriptive_name(_For,Desc,Atom):-any_to_atom(Desc,Atom),!.
561
562:-dynamic(baseKB:ttKeyworded/1). 563
565:-ain((tSet(ttKeyworded))). 566:-ain((completelyAssertedCollection(ttKeyworded))). 567:-ain((vtActionTemplate(AT)/(get_functor(AT,F))) ==> vtVerb(F)).
568
569freeze_safe(A,G):- nonvar(A),freeze(A,G).
570
571:- kb_shared(baseKB:(onSpawn)/1). 572
573onSpawn((ttKeyworded(T),{freeze_safe(F,atomic(F))},isa(F,T),{ \+ call_u(nameString(F,_)),once(guess_nameStrings(F,Txt))}==>(nameString(F,Txt)))).
574onSpawn((ttKeyworded(T),{freeze_safe(F,atomic(F))},isa(F,T),{ \+ call_u(mudDescription(F,_)),once(guess_mudDescription(F,Txt))}==>(mudDescription(F,Txt)))).
575:-ain((ttKeyworded(vtVerb))). 578:- mpred_notrace_exec. 579
580impl_coerce_hook(TextS,vtDirection,Dir):- !,
581 member(Dir-Text,[vNorth-"n",vSouth-"s",vEast-"e",vWest-"w",vNE-"ne",vNW-"nw",vSE-"se",vSW-"sw",vUp-"u",vDown-"d"]),
582 (name_text(Dir,TextS);string_equal_ci(TextS,Text)).
583
584impl_coerce_hook(Text,Subclass,X):-
585 \+ (memberchk(Subclass,[tSpatialThing])),!,
586 once((isa_asserted(X,Subclass),
587 arg_to_var(ftText,Text,TextVar),
588 req1(mudKeyword(X,TextVar)),
589 same_arg(ftText,TextVar,Text))). 590
591
592phrase_parseForTypes(TYPEARGS,ARGS,GOODARGS,LeftOver):- 593 to_word_list(ARGS,ARGSL),!,phrase_parseForTypes_0(TYPEARGS,ARGSL,GOODARGS,LeftOver).
594
595string_append(A,[B1,B2],C,ABC):-append(A,[B1,B2|C],ABC).
596string_append(A,[B],C,ABC):-append(A,[B|C],ABC).
597
598
599is_counted_for_parse(I):-t(tCountable,I), \+ (excluded_in_parse(I)),!.
600
601excluded_in_parse(apathFn(_, _)).
602excluded_in_parse(I):-tCol(I).
603excluded_in_parse(I):-ttExpressionType(I).
604excluded_in_parse(I):-mpred_prop(_,_,meta_argtypes(I)).
605excluded_in_parse(apathFn(_ = _)).
606
607instance_for_parse(I):-is_counted_for_parse(I).
608insttype_for_parse(I):-findall(C,(instance_for_parse(I),isa_or_type(I,C)),List),list_to_set(List,Set),member(I,Set).
609
610optional_strings_opt.
611
613phrase_parseForTypes_0(TYPEARGS,ARGS,GOODARGS,LeftOver):- optional_strings_opt,
614 (string_append(T1,[isOptionalStr(Str)],T2,TYPEARGS),
615 (StrT =[_] ,
616 string_append(A1,StrT,A2,ARGS),
617 string_equal_ci(Str,StrT)),!,
618 show_call((phrase_parseForTypes_1(T1,A1,G1,[]),
619 phrase_parseForTypes_9(T2,A2,G2,LeftOver),
620 string_append(G1,[Str],G2,GOODARGS))).
621
622phrase_parseForTypes_0(TYPEARGS,ARGS,GOODARGS,LeftOver):-
623 show_call(phrase_parseForTypes_1(TYPEARGS,ARGS,GOODARGS,LeftOver)).
624
625phrase_parseForTypes_1(TYPEARGS,ARGS,GOODARGS,LeftOver):- catch(phrase_parseForTypes_9(TYPEARGS,ARGS,GOODARGS,LeftOver),_,fail),!.
626phrase_parseForTypes_1([isOptional(_, W)|TYPEARGS], [], [W|GOODARGS], LeftOver):- phrase_parseForTypes_1(TYPEARGS,[],GOODARGS,LeftOver).
627phrase_parseForTypes_1([isOptionalStr(W)|TYPEARGS], [], [W|GOODARGS], LeftOver):- phrase_parseForTypes_1(TYPEARGS,[],GOODARGS,LeftOver).
628phrase_parseForTypes_1(TYPEARGS,In,Out,[]):- length(TYPEARGS,L),between(1,4,L),length(In,L),must(Out=In),!,nop(fmt(fake_phrase_parseForTypes_l(foreach_isa(In,TYPEARGS)))),fail.
629phrase_parseForTypes_1(TYPEARGS,ARGS,GOODARGS,LeftOver):- on_x_debug(phrase_parseForTypes_9(TYPEARGS,ARGS,GOODARGS,LeftOver)).
630
631phrase_parseForTypes_9(TYPEARGS,ARGS,GOODARGS,LeftOver):- (LeftOver=[];LeftOver=_ ), phrase(parseForTypes(TYPEARGS,GOODARGS),ARGS,LeftOver).
632
633parseForTypes([], [], A, A):-!.
634parseForTypes([TYPE|TYPES], [B|E], [C|C1], G) :- ground(TYPE:C),
635 no_repeats_old(parseIsa_Call(TYPE, B, [C|C1], F)),
636 parseForTypes(TYPES, E, F, G),!.
637parseForTypes([isOptional(_, W)|TYPEARGS], [W|GOODARGS], A, A):- parseForTypes(TYPEARGS,GOODARGS,A,A).
638
639
640parseIsa_Call(FT, BO, CIn, D):- once((ground(FT:CIn), list_tail(CIn,D), to_word_list(CIn,C))),
641 parseIsa(FT, B, C, D),to_arg_value(B,BO).
642
643
645parseIsa(A, B, C) :- parseIsa(A, _, B, C).
646
647is_parsable_type(T):-ttExpressionType(T).
648is_parsable_type(T):-tCol(T).
649is_parsable_type(ftAction).
650
651
653
654baseKB:mud_test(test_bad_verb, [ true(
655 \+ (phrase(parseIsa(vtVerb,ff),[ff],[]))
656 )] ).
657
658
659baseKB:mud_test(food_is_a_droppable, [ true(
660 parse_agent_text_command(iExplorer1,actDrop,[food],_D2,_E2))]).
661
662
664
665
666query_trans_subft(FT,Sub):-subFormat(FT,Sub).
667query_trans_subft(FT,Sub):-subFormat(FT,A),genls(A,Sub).
668query_trans_subft(FT,Sub):-subFormat(FT,A),subFormat(A,B),subFormat(B,Sub).
669
670
671parseFmt_vp1(Agent, do(NewAgent,Goal),[SVERB|ARGS],[]):- parse_agent_text_command(Agent,SVERB,ARGS,NewAgent,Goal),!.
672parseFmt_vp2(Agent,GOAL,[SVERB|ARGS],UNPARSED):- parse_vp_real(Agent,SVERB,ARGS,TRANSLATIONS),!,member(UNPARSED-GOAL,TRANSLATIONS).
673
674to_arg_value(Var,Var):-is_ftVar(Var),!.
675to_arg_value(Val,What):- parserVars((Val;isParserVar(Val)),What,_),!.
676to_arg_value(vHere,Here):-must((current_agent(Who),where_atloc(Who,Here))).
677to_arg_value(isSelfAgent,Who):-must((current_agent(Who))).
678to_arg_value(isRandom(Type),Term):- nonvar(Type),!,must((to_arg_value(Type,TypeR),random_instance(TypeR,Term,true))).
679to_arg_value(Call,TermO):-compound(Call),Call=..[call|CALLARGS],must((subst(CALLARGS,isThis,Term,CALLARGS2),maplist(to_arg_value,CALLARGS2,CALLARGS3),NewCall=..[call|CALLARGS3],must(req1(NewCall)),to_arg_value(Term,TermO))).
680to_arg_value(Term,TermO):-must((map_term(to_arg_value,Term,TermO))).
681
682map_term(Pred,Term,TermO):-var(Term),!,must(call(Pred,Term,TermO)).
683map_term(Pred,Term,TermO):-is_list(Term),!,must(maplist(Pred,Term,TermO)).
684map_term(Pred,Term,TermO):-compound(Term),Term=..TermL,!,must(maplist(Pred,TermL,TermOL)),TermO=..TermOL.
685map_term(_,Term,Term):-!.
686
701 702
703:- dynamic(parseIsa/4). 704
705parseIsa(_T, _, [AT|_], _):- var(AT),!,fail.
706parseIsa(FT, B, C, D):- var(FT),trace_or_throw(var_parseIsa(FT, B, C, D)).
707parseIsa(Str,A,B,C) :-string(Str),!, parseIsa(exactStr(Str),A,B,C).
708
710
711:- call(call,assert((parseIsa(isNot(Type), Term, C, D) :- !, dcgAnd(dcgNot(parseIsa(Type)), theText(Term), C, D)))). 712
713parseIsa(ftAction,Goal,Left,Right):-!,one_must(parseFmt_vp1(isSelfAgent,Goal,Left,Right),parseFmt_vp2(isSelfAgent,Goal,Left,Right)).
714
715:- baseKB:ensure_loaded(library(multimodal_dcg)). 716
717parseIsa(t(P,S,O),TermV) -->{!},parseIsa(call(t(P,S,O)),TermV).
718parseIsa(call(Call),TermV) --> {!,subst(Call,isThis,TermV,NewCall)},theText(TermT), {req1(NewCall),match_object(TermT,TermV)}.
719parseIsa(exactStr(Str),Str) --> {!},[Atom],{string_equal_ci(Atom,Str),!}.
720parseIsa(isOptionalStr(Str),Str) --> { \+ (optional_strings_opt)},[Atom],{string_equal_ci(Atom,Str),!}.
721parseIsa(isOptionalStr(_),isMissing) --> {!},[].
722parseIsa(isOptionalStr(_Str),_) --> {!,fail}.
723parseIsa(isOptional(_,Term),TermV) --> {to_arg_value(Term,TermV)}, [TermT], {samef(TermV,TermT)}.
724parseIsa(isOptional(Type, _), TermV, C, D) :- nonvar(Type),parseIsa(Type, TermV, C, D).
725parseIsa(isOptional(_Type,Default), DefaultV, D, D2):- !,D=D2,to_arg_value(Default,DefaultV).
726
730
731parseIsa(ftString,String)--> {!}, theString(String).
732parseIsa(FT, B, [AT|C], D) :- nonvar(AT),member_ci(AT,["the","a","an"]),parseIsa(FT, B, C, D).
733
734parseIsa(isOneOf(List),Term) --> {!,member(E,List)},parseIsa(E,Term).
735
736
737parseIsa(ftListFn(Type),[Term|List]) --> parseIsa(Type,Term),parseIsa(ftListFn(Type),List).
738parseIsa(ftListFn(_Type),[]) --> {!},[].
739
740parseIsa(countBetween(_Type,_,High),[]) --> {High==0,!}, [].
741parseIsa(countBetween(Type,Low,High),[Term|List]) --> parseIsa(Type,Term),{!,Low2 is Low -1,High2 is High -1 },
742 parseIsa(countBetween(Type,Low2,High2),List).
743parseIsa(countBetween(_Type,Low,_),[]) --> {!, Low < 1}, [].
744
746parseIsa(isAnd([L]),Term1) --> {!},parseIsa(L,Term1).
747parseIsa(isAnd([L|List]),Term) --> {!},dcgAnd(parseIsa(L,Term),parseIsa(isAnd(List),Term)).
748
749parseIsa(isMost(List),Term1) --> {!},parseIsaMost(List,Term1).
750
751
752parseIsa(Type,Term)--> dcgAnd(dcgLenBetween(1,2),theText(String)),{coerce(String,Type,Term)}.
753
754parseIsaMost(List,Term) --> parseIsa(isAnd(List),Term),{!}.
756
757coerce_as(B,A,C):-coerce(A,B,C).
758
762coerce_hook(A,B,C):- to_arg_value(A,AStr),call_u(isa_or_type(AStr,B)),AStr=C,!.
763coerce_hook(A,B,C):- no_repeats(C,(coerce0(A,B,C0),to_arg_value(C0,C))),(show_failure(isa_or_type(C,B))->!;true).
765
767coerce0(String,Type,Inst):- var(Type),!,trace_or_throw(var_specifiedItemType(String,Type,Inst)).
768
770coerce0(String,isNot(Type),Inst):-!, sanity(nonvar(Type)), \+ (coerce(String,Type,Inst)).
771coerce0(String,isOneOf(Types),Inst):-!, member(Type,Types),coerce(String,Type,Inst),!.
772
774coerce0(String,ftString,String):- is_ftString2(String),!.
775coerce0(Inst,ftString,String):- \+ is_ftText(Inst),!,must(name_text(Inst,String)).
776coerce0(Any,ftString,String):- !, any_to_string(Any,String).
777
778
779coerce0(IsList,ftListFn(How),Result):- is_list(IsList),!,maplist(coerce_as(How),IsList,Result).
780coerce0(IsList,ftListFn(How),Result):- !,maplist(coerce_as(How),[IsList],Result).
781
782coerce0([A],B,C):- string(A),coerce_hook(A,B,C),!.
783coerce0(String,Type,Inst):- string(String),string_to_atom(String,Inst),isa_or_type(Inst,Type),!.
784
785
787coerce0(String,ftText,String):- is_ftText(String),!.
788coerce0(String,ftText,StringO):- !,coerce0(String,ftString,StringO).
789
792coerce0(Inst,Type,Inst):- var(Inst),!,instances_of_type(Inst,Type).
794coerce0(Any,_,_):- empty_string(Any),!,fail.
795
797coerce0(Text,Type,Inst):- (no_repeats_old(call_no_cuts(impl_coerce_hook(Text,Type,Inst)))).
798coerce0(Inst,Type,InstO):- instances_of_type(Inst,Type),!,InstO=Inst.
799
800
801
802
803coerce0(isRandom(WhatNot),Type,Inst):- !, must((nonvar(WhatNot),to_arg_value(WhatNot,TypeR),random_instance(TypeR,Inst,isa(Inst,Type)))).
804coerce0(String,Type,Inst):- Type==tCol, i_name('t',String,Inst),is_asserted(tCol(Inst)),!.
805coerce0(String,Type,Inst):- ttExpressionType(Type),!,checkAnyType(clause(assert,actParse),String,Type,AAA),Inst=AAA.
807coerce0(String,C,Inst):- compound(C),!,loop_check(parseIsa(C,Inst,[String],[])).
808coerce0(String,Type,Inst):- must(tCol(Type)),instances_of_type(Inst,Type),match_object(String,Inst).
809
811
812
813
814instances_of_type(Inst,Type):- no_repeats_old(instances_of_type_0(Inst,Type)).
815
816available_instances_of_type(Agent,Obj,Type):- must(current_agent(Agent)), current_agent_or_var(Agent), isa(Obj,Type), mudDistance(Agent,Obj,D),D<6.
817
821instances_of_type_0(Inst,Type):- isa_or_type(Inst,Type).
822
823instances_sortable(TYPE,HOW):-instances_sortable0(TYPE,HOW),!.
824instances_sortable(TYPE,HOW):-genls(TYPE,SUPER),instances_sortable0(SUPER,HOW),!.
825instances_sortable(_,distance_to_current_avatar(Agent)):-current_agent_or_var(Agent).
826
827instances_sortable0(tWieldAble,distance_to_current_avatar(Agent)):-current_agent_or_var(Agent).
828instances_sortable0(tWearAble,distance_to_current_avatar(Agent)):-current_agent_or_var(Agent).
829
830distance_to_current_avatar(Agent,ORDEROUT,L,R):-mudDistance(Agent,L,L1),mudDistance(Agent,R,R1),compare(ORDER,L1,R1),!, (ORDER == '=' -> naming_order(ORDEROUT,L,R) ; ORDEROUT=ORDER).
831
833
834 835
836mudDistance(Agent,_Obj,(-1)):- var(Agent),!.
837mudDistance(Agent,Obj,0):- mudWielding(Agent,Obj),!.
838mudDistance(Agent,Obj,1):- wearsClothing(Agent,Obj),!.
839mudDistance(Agent,Obj,2):- mudStowing(Agent,Obj),!.
840mudDistance(Agent,Obj,3):- mudPossess(Agent,Obj),!.
841mudDistance(Agent,Obj,N):- mudPossess(OtherAgent,Obj),mudDistance(OtherAgent,Obj,AD),!,
842 (same_regions(Agent,OtherAgent)->OAD=5; OAD=20),!,N is AD + OAD.
843mudDistance(Agent,Obj,5):- same_regions(Agent,Obj),!.
844mudDistance(_Agent,_Obj,20).
845
846naming_order(ORDER,L,R):-compare(ORDER,L,R).
847
848get_sorted_instances(Inst,Type,HOW):-findall(Inst,isa(Inst,Type),List),sort(List,NoDupes),predsort(HOW,NoDupes,Sorted),!,member(Inst,Sorted).
849
858
859:- include(prologmud(mud_footer)). 860:- all_source_file_predicates_are_transparent.