static S ai_specReturn_answerToExternalQuestion(S q, Var answer) { answer.set("[Calculating...]"); q = switcheroo(q); print("Switcheroo to: " + q); T3 t = ai_tripelize(q); print("Have triple: " + t); if (t == null) ret "[Couldn't tripelize]"; /*t = ai_switcherooTriple(t); print("Have switched triple: " + t);*/ T3 tFact = ai_tripleWithoutQuestionMark(t); if (has_verbose(tFact)) ret "Yes"; T3 tNot = ai_negateTriple(t); if (has_verbose(tNot)) ret "No"; try answer ai_answerIsQuestion(t); try answer ai_answerWhatQuestion(t); S unknown = ai_findUnknownThingInTriple(t); if (unknown != null) ret "What is " + unknown + "?"; ret "[No answer found for: " + ai_renderTriple(t) + "]"; } static double ai_specReturn_answerToExternalQuestion_defaultTimeout = 10.0; static S ai_specReturn_answerToExternalQuestion(fS q) { ret ai_specReturn_answerToExternalQuestion(ai_specReturn_answerToExternalQuestion_defaultTimeout, q); } static S ai_specReturn_answerToExternalQuestion(double timeout, fS q) { final new Var answer; evalWithTimeout(timeout, r { setVarUnlessNull(answer, ai_specReturn_answerToExternalQuestion(q, answer)) }); ret answer!; }