public void Run()
{
if (this.fired == null)
{
this.fired = new List<Rule>();
this.notfired = new List<Rule>(this.rules);
}
while (this.retracted.Count > 0)
this.ProcessRetractedFact(this.retracted.Dequeue());
this.ProcessNotTestedRules();
while (this.asserted.Count > 0)
this.ProcessAssertedFact(this.asserted.Dequeue());
}