static Pair, LS> ai_activeRulesAndFacts() { ret ai_activeRulesAndFacts(null); } static Pair, LS> ai_activeRulesAndFacts(LS extraFacts) { time "ai_activeRulesAndFacts" { LS facts = concatLists_conservative(extraFacts, mL_facts()); LS unparsedRules = ai_unparsedTalkRules(); for (S listName : mL("Rule & Fact Lists")) for (S x : splitAtEmptyLines(mL_raw(listName))) if (anyJavaTokens(x)) if (nlLogic_parseRule(x) != null) unparsedRules.add(x); else facts.add(x); unparsedRules = sortedByCalculatedField(unparsedRules, func(S s) { jcontains(s, "entity(") }); L rules = map_pcall nlLogic_parseRule(unparsedRules); for (S listName : mL("Default active scripts")) addAll(rules, nlLogic_loadMechScript(listName)); nlLogic_expandMacros(rules); } ret pair(rules, facts); }