bew(F,Z):-write(F),write('<'),write(Z),write(' ').
/* Bewertung ausgeben: F Ziel, Z Bewertung */
aus(B,V,F):-write(B),write(V),write(F).
/* Ausgabe: B Bedingung, V Verbindungstext, F Folgerung */
din(B,F):-write('Bedingung: '),readln(B),write('Folgerung: '),readln(F).
/* Eingabe: B Bedingung, F Folgerung */

ein:-din(B,F),not(clause(dat(B,F,_),true)),asserta(dat(B,F,0)),aus(B,'=>',F),nl,
     write('Fortsetzung(j/n) '),readln(A),nl,A=[j],ein.
/* Aufnahme, Speichern der Wenn-Dann-Beziehungen */

dimp(B,F):-clause(dat(A,F,Z),true,X),aus(F,'<=',''),dimp(B,A),
    clause(sum(S),true),Y is Z+S,bew(F,Y),erase(X),asserta(dat(A,F,Y)).
/* Schlusskette B nach F rekursiv erstellen: Berechnung der Bewertung */
dimp(B,_):-write(B),nl,write('Akzeptieren(j/n) '),readln(A),nl,A=[j],
    asserta(sum(1)).
/* am Schlusskettenende Akzeptanz erfragen, wenn ja, dann Bewertungssummand 1 */
dimp(_,_):-asserta(sum(0)).
/* wenn Ende, keine Akzeptanz, dann Bewertungssummand 0 */
impl:-din(B,F),dimp(B,F).
/* Start der Schlusskettensuche */


