!7 sclass SmartAnswerMachine1 > DynPrintLog { transient new CopyOnWriteArrayList log; bool speak = true; void start { // load cat log log.addAll(map words(katze_getFullLog())); print("Have log entries: " + l(log)); onSpeechRecognized_withoutMyUtterances(voidfunc(S s) { think(s) }); } void think(S s) { log.add(words(s)); L l = ai_applyPrefixPairs(overlappingPairs(log), words(s)); L candidates = map joinWithSpace(l); if (empty(l)) print("\n" + s + " => no candidates\n"); else { print("\n" + s + " => candidates:\n"); printIndent(lines(candidates)); if (speak) dm_say(first(candidates)); } } }