That is correct LIFO behaviour - last in first out. Ray Krueger wrote:
The agenda, when calling getNextFocus, calls getLast(). Which causes the consequences to be executed in reverse order. Is there a reason for that?For example, the following example.... public static void main(String[] args) throws Exception { StringBuffer rules = new StringBuffer(); rules.append("package example;\n") .append("import java.lang.Integer;\n") .append("rule \"Count\"\n") .append("when\n") .append("i : Integer()\n") .append("then\n") .append("System.out.println(i);\n") .append("end\n"); System.out.println(rules); final PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl(new StringReader(rules.toString())); final RuleBase ruleBase = RuleBaseFactory.newRuleBase(); ruleBase.addPackage(builder.getPackage()); final WorkingMemory workingMemory = ruleBase.newWorkingMemory(); for (int i = 0; i < 10; i++) { workingMemory.assertObject(new Integer(i)); } workingMemory.fireAllRules(); } Will print out... 9 8 7 6 5 4 3 2 1 0
