One of the first assumptions Drools' newcomers make is that rules in a DRL file are evaluated in the same order they are defined, as if each rule were some kind of if
statement from an imperative language forming a sequential evaluation structure. But evaluating rule conditions in sequence is neither efficient nor scalable at all. Even worse, adding inference capabilities into this scenario would also be a nightmare.
In the mid-seventies, Dr. Charles L. Forgy introduced a new pattern matching algorithm to be used in production systems, called RETE (https://en.wikipedia.org/wiki/Rete_algorithm). The RETE algorithm sacrificed memory for increased speed, providing an improvement in several orders of magnitude over traditional pattern-matching algorithms. Ever since, multiple production rule systems have been using a derived or customized version of RETE as their pattern matching internal algorithm. This chapter is based on Drools' implementation of RETE and its latest evolution...