%Aufgabe 3.2 %----------- regel(1,auto,limousine,[nicht_sportlich]). regel(2,auto,sportwagen,[sportlich]). regel(3,limousine,kombi,[grossfamilie,viel_platz]). regel(4,sportwagen,porsche,[teuer,exklusiv]). regel(5,limousine,jeep,[gelaende_faehig]). regel(6,jeep,landrover,[safaritour]). regel(7,limousine,lastwagen,[transport,spedition]). regel(8,lastwagen,pritschenlaster,[viel_klein_gut]). regel(9,lastwagen,aufleger,[container]). regel(10,limousine,kaefer,[student,billig,lang_haltbar]). regel(11,limousine,oldtimer,[liebhaber,klassisch]). regel(12,oldtimer,ford_modell_t,[uralt,selten]). regel(13,sportwagen,ferrari,[rot,teuer,flair]). regel(14,limousine,wohnmobil,[grossfamilie,kein_haus]). anfrage(nicht_sportlich,[sind,sie,ein,gemaessigter,fahrer]). anfrage(sportlich,[sind,sie,ein,sportlich,rasanter,fahrer]). anfrage(grossfamilie,[haben,sie,eine,grosse,familie]). anfrage(viel_platz,[benoetigen,sie,viel,platz]). anfrage(teuer,[darf,der,wagen,etwas,teurer,sein]). anfrage(exklusiv,[wollen,sei,ein,exkusives,auto]). anfrage(gelaende_faehig,[fahren,sie,oefters,im,gelaende]). anfrage(safaritour,[wollen,sie,an,einer,safaritour,teilnehmen]). anfrage(transport,[wollen,sie,gueter,transportieren]). anfrage(spedition,[haben,sie,eine,spedition]). anfrage(viel_klein_gut,[muessen,sie,viele,kleine,gueter,transprotieren]). anfrage(container,[transportiern,sie,hauptsaechlich,container]). anfrage(student,[wollen,sie,ein,studentenauto]). anfrage(billig,[soll,der,wagen,billig,sein]). anfrage(lang_haltbar,[soll,der,wagen,sehr,lange,funktionieren]). anfrage(liebhaber,[sind,sie,ein,autoliebhaber]). anfrage(klassisch,[wollen,sie,ein,klassisches,nostalgisches,modell]). anfrage(uralt,[darf,der,wagen,uralt,sein]). anfrage(selten,[bevorzugen,sie,einen,sehr,seltenen,wagen]). anfrage(rot,[wollen,sie,das,beruehmte,rot,als,farbe,ihres,wagens]). anfrage(flair,[soll,ihr,wagen,ein,italienisches,flair,haben]). anfrage(kein_haus,[haben,sie,kein,wohnhaus]). berate :- erkenne(auto). erkenne(Praemisse) :- regel(Rnr,Praemisse,Konklusion,Bedingungen), ueberpruefe(Bedingungen), merke(Rnr), drucke_regel(Praemisse,Konklusion,Rnr), erkenne(Konklusion). erkenne(_) :- gefunden(_), write('Das wars. Danke fuer Ihr Interesse!'),nl, start. % mit start wird die erzuegte erkenne(_) :- not(gefunden(_)), % Regelbasis zurueckgesetzt. write('Ich habe leider nicht mehr Informationen fuer Sie!'),nl,start. ueberpruefe([]). ueberpruefe([Bedingung|Weitere_Bedingung]) :- frage(Bedingung), ueberpruefe(Weitere_Bedingung). frage(Bedingung) :- faktum(Bedingung,'ja'),!. frage(Bedingung) :- faktum(Bedingung,'nein'),!,fail. frage(Bedingung) :- anfrage(Bedingung,Anfragetext), schreibe_liste(Anfragetext),write('? '),nl, read(Antwort), assert(faktum(Bedingung,Antwort)), Antwort == 'ja'. merke(Rnr) :- gefunden(Rnr). merke(Rnr) :- assert(gefunden(Rnr)). schreibe_liste([]). schreibe_liste([Kopf|Rest]) :- write(Kopf), write(' '), schreibe_liste(Rest). drucke_regel(Praemisse,Konklusion,Rnr) :- write('Ich empfehle Ihnen statt '),write(Praemisse), write(' einen '),write(Konklusion),nl, write(' aufgrund der Regel '),write(Rnr),nl. beschreibe :- write('Welches Auto soll beschrieben werden ? '), read(Auto), liefere_einzelheiten(Auto). liefere_einzelheiten(Auto) :- regel(Rnr,Klasse,Auto,Bedingung), beschreibung(Klasse,Bedingung), liefere_einzelheiten(Klasse). liefere_einzelheiten(_). beschreibung(Klasse,Bedingung) :- nl, write('Es ist ein '),write(Klasse), write(' mit folgenden Eigenschaften: '),nl, tab(3), schreibe_liste(Bedingung). bereinige :- retractall(faktum(_,_)), retractall(gefunden(_)). % fuer sixtus prolog muss eine Regel schon existieren, sonst wird ein % EXISTENCE ERROR erzeugt. Der Wert a ist ein Dummywert. start:- bereinige, assert(faktum(a,a)), assert(gefunden(a)). % die Regel start muss am Anfang ausgefuehrt werden: :- start.