Zielorientierte Inferenz
-
Hallo zusammen, ich habe da mal eine Frage wegen dem Algorithmus.
Input: RB - Regelbasis, F - Faktenmenge, [q1, ..., qn] eine Liste von Zielen
Output: yes, falls alle qi gefolgert werden können, sonst nein.So ist die Version die ich hier in meinem BUch habe
BACKCHIN([q1, ..., qn]) if n = 0 then return yes if q1 in F then BACKCHAIN([q2, ..., qn]) else for each Regel p1^...^qm -> q aus RB mit q1 = q do if BACHCHAIN([q1, ..., qm, q2, ..., qn]) = yes then return yes endfor endif return no
Und so ist die Version bei der ich der Meinung bin, dass sie richtig ist.
Gehört da nicht ein return in die die zweite if Abfrage, da doch sonst immer no zurück gegeben wird nach dem rekursiven Aufruf?BACKCHIN([q1, ..., qn]) if n = 0 then return yes if q1 in F then return BACKCHAIN([q2, ..., qn]) else for each Regel p1^...^pm -> q aus RB mit q1 = q do if BACHCHAIN([p1, ..., pm, q2, ..., qn]) = yes then return yes endfor endif return no
-
Ja, sehe ich auch so (denn sonst würde der Rückgabewert ja gar nicht ausgewertet).
-
Ok, das ist gut zu wissen. Dann werde ich mir meine Version merken. Danke schön