!7 concept Is { S a, b, mod; } module IsBot > DynAttractorBot { PairS splitIt(S s) { LS tok = wordTok(s); int i = -1; if (l(tok) == 2*2+1) // two words i = 3; else { L determiners = indicesOfAny(tok, mechCISet("Determiners"), 3); if (l(determiners) == 1) i = last(determiners); } ret i < 0 ? null : pair(joinSubList(tok, 1, i-1), joinSubList(tok, i, l(tok)-1)); } AttractorBot makeBot() { ret testBot(attractorBotFromLambda(input -> { input = ai_userSpaceToObjective(input); print("Got objective space input: " + input); LS tok = wordTok(input); S linkWord = second(tok); ret unless eqicOneOf(linkWord, "is", "are", "am"); // tautological case S s = joinSubList(tok, 3); if (matchDoubleRest("", s)) ret with emitAnswer("yes, obviously"); PairS p = splitIt(s); if (p == null) ret with emitAnswer("I can't parse that sentence"); S a = p.a, b = p.b; emitAnswer(ai_objectiveSpaceToBot("I don't know if " + a + " " + linkWord + " " + b)); })); } AttractorBot testBot(AttractorBot bot) { testAttractorBotResponses_noFail(bot, "is green green?", "yes, obviously", "is a man a child?", "I don't know if a man is a child", "is sleep pleasant", "I don't know if sleep is pleasant"); ret bot; } start { dbIndexingCI(Is, 'a, Is, 'b); } }