本文隻用于了解rete算法,通過一個規則的編譯成的網絡結構,以及比對過程去了解rete算法的核心思想。具體實作,截止寫本文之時,還不了解。隻是提供一個rete算法的實作思路。再次重申,隻用于了解rete算法。如有不正确,請交流指正,一定會非常感謝。
(1)規則内容
IF:
年級是三年級以上,
性别是男的,
年齡小于10歲,
身體健壯,
身高170cm以上,
THEN:
這個男孩是一個籃球苗子,需要培養
(2)規則編譯網絡和比對過程

比對過程:
(1)比對過程中事實在網絡節點中的流轉順序為A-->B-->C-->D-->E-->F-->G-->H-->I--->規則比對通過
(2)從working-Memory中拿出一個待比對的StudentFact對象,進入根節點然後進行比對,以下是fact在各個節點中的活動圖
A節點:拿StudentFact的年級數值進行年級比對,如果年級符合條件,則把該StudentFact的引用記錄到A節點的alpha記憶體區中,退出年級比對。
B節點:拿StudentFact的性别内容進行性别比對,如果性别符合條件,則把該StudentFact的引用記錄到B節點的alpha記憶體區中,然後找到B節點左引用的Beta節點,也就是C節點。
C節點:C節點找到自己的左引用也就是A節點,看看A節點的alpha記憶體區中是否存放了StudentFact的引用,如果存放,說明年級和性别兩個條件都符合,則在C節點的Beta記憶體區中存放StudentFact的引用,退出性别比對。
D節點:拿StudentFact的年齡數值進行年齡條件比對,如果年齡符合條件,則把該StudentFact的引用記錄到D節點的alpha的記憶體區中,然後找到D節點的左引用的Beta節點,也就是E節點。
E節點:E節點找到自己的左引用也就是C節點,看看C節點的Beta記憶體區中是否存放了StudentFact的引用,如果存放,說明年級,性别,年齡三個條件符合,則在E節點的Beta記憶體區中存放StudentFact的引用,退出年齡比對。
F節點:拿StudentFact的身體數值進行身體條件比對,如果身體條件符合,則把該StudentFact的引用記錄到D節點的alpha的記憶體區中,然後找到F節點的左引用的Beta節點,也就是G節點。
G節點:G節點找到自己的左引用也就是E節點,看看E節點的Beta記憶體區中是否存放了StudentFact的引用,如果存放,說明年級,性别,年齡,身體四個條件符合,則在G節點的Beta記憶體區中存放StudentFact的引用,退出身體比對
H節點:拿StudentFact的身高數值進行身高條件比對,如果身高條件符合,則把該StudentFact的引用記錄到H節點的alpha的記憶體區中,然後找到H節點的左引用的Beta節點,也就是I節點。
I節點:I節點找到自己的左引用也就是G節點,看看G節點的Beta記憶體區中是否存放了StudentFact的引用,如果存放了,說明年級,性别,年齡,身體,身高五個條件都符合,則在I節點的Beta記憶體區中存放StudentFact引用。同時說明該StudentFact對象比對了該規則,形成一個議程,加入到沖突區,執行該條件的結果部分:該學生是一個籃球苗子。