|
Jeweils eine 'Bedingung' B und eine 'Folgerung' F werden mit dem Prädikat ein in einer Klausel dat(B,F) abgelegt. Die dat-Klauseln werden dabei in der Reihenfolge der Eingabe
gespeichert. Gibt man nach Aufruf von impl eine Bedingung A und eine Folgerung E vor, so versucht das Programm, E schrittweise über die eingegebenen Beziehungen mit A zu verbinden, also eine Schlusskette zu erzeugen. Dies
geschieht durch den rekursiven Aufruf des Prädikats dimp(B,F): dimp sucht zu einer Folgerung F eine Bedingung A, zu der dat(A,F) existiert, und ersetzt dann bei einem erneuten Aufruf F durch A. Dabei wird dat(A,F) aus der Klauselliste gelöscht und an Ende wieder angehängt. Hierdurch wird erreicht, dass diese Klausel bei einem neuen Suchlauf erst sehr spät untersucht wird. Um unnötigen Programmtext zu vermeiden, sind zur Ein- und Ausgabe die Prädikate din und aus formuliert. Die zweite Klausel dimp(B,_) ist entbehrlich, ermöglicht aber eine schönere Ausgabe der Schlusskette. Dadurch, dass die dat-Klauseln bei jedem Aufruf ihren Platz im Programm ändern, werden bei erneuten Aufrufen von impl alternative Schlussketten gebildet.
Hinweis: Das Programm lässt sich ausbauen: Man speichere als dritten Parameter von dat eine Bewertungszahl ab, z.B. die Anzahl bzw. die Häufigkeit der Zugriffe. Statt eine dat-Klausel nach dem Löschen an das Ende der Klauselliste zu hängen, kann sie
entsprechend ihrer Bewertung in die Liste eingeordnet werden. |
|
aus(B,V,F):-write(B),write(V),write(F). din(B,F):-write('Bedingung: '),readln(B), write('Folgerung: '),readln(F). ein:-din(B,F),not(clause(dat(B,F),true)), asserta(dat(B,F)),aus(B,'=>',F),nl, write('Weiter(j/n) '),readln(A),nl, A=[j],ein. dimp(B,F):-clause(dat(A,F),true,X), erase(X),assert(dat(A,F)), aus(F,'<=',''),dimp(B,A). dimp(B,_):-write(B). impl:-din(B,F),dimp(B,F). |
Prädikat zur Ausgabe von B und F, dazwischen Text V Prädikat zur Texteingabe von Bedingung B und Folgerung F
Eingabe von B,F ,Test, ob dat(B,F) noch nicht existiert |
Aufgabe: Man versuche, die vorgeschlagenen Verbesserungen zur realisieren.