:- dynamic naturalLanguageQueryHistory/2, naturalLanguageAnswerHistory/3, naturalLanguageCommandHistory/3, currentAgent/1, currentSpeaker/1, currentWSMContext/1. setByRetractingAllAndAsserting(Term) :- Term =.. [Predicate|Args], length(Args,Length), length(TmpArgs,Length), TmpTerm =.. [Predicate|TmpArgs], retractall(TmpTerm), assert(Term). alexaSkillFLPQuery(Query,Response) :- alexaSkillFLPQueryHelper(Query,Response,0,1). alexaSkillFLPQueryHelper(Query,Response,Simulate,Log) :- currentWSMContext(TmpContext), atom_concat('Org::Cyc::WSMContext::',TmpContext,Context), ( Log = 1 -> ( getCurrentDateTime(DateTime), fassert_argt('Agent1','Yaswi1',[term(naturalLanguageQueryHistory(Query,DateTime)),context(Context)],Result1)) ; true ), naturalLanguageQuery(Query,Result2), ( Result2 = assert(Assertion) -> ( view([asserting,[assertion,Assertion,context,Context]]), ( Simulate = 1 -> true ; ( %% FIXME: before actually asserting we will %% want to verify that it doesn't contradict %% the KB, as with FreeKBS2 %% FIXME: distinguish which WSM Context to %% assert to. fassert_argt('Agent1','Yaswi1',[term(Assertion),context(Context)],Result3), Result4 = [command(assert(Assertion)),returnValue(Result3),answer(-1)], view([assertion,Result4]) ) ) ) ; ( Result2 = query(ActualQuery) -> ( view([querying,[query,ActualQuery,context,Context]]), ( Simulate = 1 -> true ; ( term_variables(ActualQuery,Vars), view([query,ActualQuery,vars,Vars]), %% FIXME: distinguish which WSM Context to %% query from. call(ActualQuery), view([query,ActualQuery]), Result4 = [command(query(ActualQuery)),returnValue(ReturnValue),answer(Vars)], view([query,Result4]) ) ) ) ; Result4 = [command(Result2),returnValue(-1),answer(-1)] ) ), view([result4,Result4]), generateResponseFromTemplate(Result4,Answer), %% ( Log = 1 -> %% ( %% fassert_argt('Agent1','Yaswi1',[term(naturalLanguageAnswerHistory(Query,Answer,DateTime)),context(Context)],Result1), %% fassert_argt('Agent1','Yaswi1',[term(naturalLanguageCommandHistory(Query,Result4,DateTime)),context(Context)],Result1) %% ) ; %% true ), atomic_list_concat(['',Answer,''],'',Response), !. alexaSkillFLPQueryHelper(Query,Response,Simulate,Log) :- atom_concat('I heard and cannot understand this: ',Query,Atom), atomic_list_concat(['',Atom,''],'',Response), !. alexa(Query,Response) :- alexaSkillFLPQueryHelper(Query,Response,0,1). testAlexa(Query,Response) :- alexaSkillFLPQueryHelper(Query,Response,0,0). testAlexaSim(Query,Response) :- alexaSkillFLPQueryHelper(Query,Response,1,0). hasEnglishGloss(Symbol,Gloss) :- hasEnglishGlosses(Symbol,Glosses), member(Gloss,Glosses). hasEnglishGloss2(Symbol,Gloss) :- setof(Symbol,Glosses^(hasEnglishGlosses(Symbol,Glosses),member(Gloss,Glosses)),Results), nth(1,Results,Symbol). hasEnglishGlosses(X,Y) :- not(hasEnglishGlossesData(X,Y)), Y = [X],!. hasEnglishGlosses(X,Y) :- hasEnglishGlossesData(X,Y). resolveProperName(NameString,Term) :- findall(Agent,hasFirstName(Agent,firstNameFn(NameString)),Agents), ((length(Agents,0)) -> (findall(Agent,hasLastName(Agent,lastNameFn(NameString)),Agents), ((length(Agents,0)) -> (Term = unknownAgentFn(Agent)) ; ((length(Agents,1)) -> ([Term] = Agents) ; (Term = oneOf(Agents))))) ; ((length(Agents,1)) -> ([Term] = Agents) ; (Term = oneOf(Agents)))). %% develop common substitutions, such as (8|eight|ate), and use this %% to correct the lack of language modeling in our (borrowed) %% circumvention of the deprecation of LITERAL slots phoneticallySimilar(['8','eight','ate']). %% naturalLanguageQuery(Query,Response) :- %% atomic_list_concat(['Logging: ',Query],'',Response). %% currentlyHolds(atTime(DateTime,Assertion)) :- %% findall(). %% have the option of distinguishing between things that change over %% time and events that are recorded at specific times, i.e. that you %% saw the keyboard in the kitchen at two different times is different %% than Mom eating grapes two different times. Figure out this %% difference. listQueryDateTimes(QueryDateTimes) :- findall(naturalLanguageQueryHistory(Query,DateTime),naturalLanguageQueryHistory(Query,DateTime),QueryDateTimes). listQueries(Queries) :- findall(Query,naturalLanguageQueryHistory(Query,DateTime),Queries).