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


Anmelden zum Antworten