Fakten, Regeln, und Anfragen
Was sind Wissensbasen?
Wie sehen Prolog-Wissensbasen aus?
Und was für Anfragen können wir stellen?
Die Prologsyntax.
Programmierkurs Prolog – p.1
Eine Wissensbasis (auf deutsch)
toto ist ein frosch.
toto ist grün.
bodo ist ein storch.
Diese Wissensbasis besteht aus drei Fakten.
Programmierkurs Prolog – p.2
Der Prolog-Interpreter
Der Prologinterpreter “liest” eine Wissensbasis und beantwortet dann
Anfragen zu dieser Wissensbasis.
Zum Beispiel:
ist toto ein frosch? Prolog: Ja
toto ist ein frosch.
ist toto ein storch? Prolog: Nein
toto ist grün.
wer ist grün? Prolog: toto
bodo ist ein storch.
Achtung! Der Prologinterpreter weiß nur das, was in der Wissensbasis
steht. Einzelne Wörter haben keine Bedeutung für Prolog.
Deswegen:
ist toto ein tier? Prolog: Nein
Programmierkurs Prolog – p.3
Noch eine Wissensbasis (auf deutsch)
toto ist ein frosch.
toto ist grün.
bodo ist ein storch.
alle frösche sind tiere.
alle störche sind tiere.
Diese Wissensbasis besteht aus drei Fakten und zwei Regeln.
Wie antwortet Prologinterpreter auf die Anfrage:
ist bodo ein tier?
Programmierkurs Prolog – p.4
Die 1. Wissensbasis “auf Prolog”
toto ist ein frosch. ist ein frosch(toto).
toto ist grün. ist grün(toto).
bodo ist ein storch. ist ein storch(bodo).
Andere Möglichkeiten:
frosch(toto). f(toto).
grün(toto). g(toto).
storch(bodo). s(bodo).
Programmierkurs Prolog – p.5
Die Wissensbasis ‘kb1’
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
Diese Wissensbasis besteht aus vier Fakten. Sie definiert zwei
Prädikate, nämlich woman und playsAirGuitar.
Anfragen “auf Prolog”:
woman(mia).
playsAirGuitar(mia).
woman(vincent).
man(vincent).
Programmierkurs Prolog – p.6
Die Wissensbasis ’kb2’
listensToMusic(mia).
happy(yolanda).
playsAirGuitar(mia) :- listensToMusic(mia).
playsAirGuitar(yolanda) :- listensToMusic(yolanda).
listensToMusic(yolanda) :- happy(yolanda).
Diese Wissensbasis besteht aus zwei Fakten und drei Regeln, bzw. fünf
Klauseln.
Programmierkurs Prolog – p.7
Regeln
:- heißt wenn dann.
Die Regel playsAirGuitar(mia) :- listensToMusic(mia).
kann so gelesen werden: Wenn listensToMusic(mia) wahr ist,
dann ist auch playsAirGuitar(mia) wahr.
Die linke Seite einer Regel heißt Kopf (head), und die rechte Seite heißt
Körper oder Rumpf (body).
Programmierkurs Prolog – p.8
Die Wissensbasis ‘kb3’
happy(vincent).
listensToMusic(butch).
playsAirGuitar(vincent) :- listensToMusic(vincent),
happy(vincent).
playsAirGuitar(butch) :- happy(butch).
playsAirGuitar(butch) :- listensToMusic(butch).
Programmierkurs Prolog – p.9
Die Wissensbasis ‘kb4’
woman(mia). Wer ist eine Frau?:
woman(jody). woman(X).
woman(yolanda).
Prolog: X = mia
Gibt es noch andere?: ;
loves(vinvent,mia). Prolog: X = jody
loves(marcellus,mia). Und noch andere?: ;
loves(pumpkin,honey bunny). Prolog: X = yolanda
loves(honey bunny,pumpkin). Und noch andere?: ;
Prolog: no
Programmierkurs Prolog – p.10
Wissensbasis ‘kb5’
loves(vinvent,mia).
loves(marcellus,mia).
loves(pumpkin,honey bunny).
loves(honey bunny,pumpkin).
jealous(X,Y) :- loves(X,Z),
loves(Y,Z).
Programmierkurs Prolog – p.11
Aufgaben
1. Wie könnte man unsere 2. ‘deutsche’ Wissensbasis als
Prolog-Wissensbasis hinschreiben?
2. Denkt euch eine kleine Wissensbasis aus und schreibt sie sowohl
auf deutsch also auch in Prolognotation auf.
3. Erfindet 4 Anfragen, die man an diese Wissensbasis stellen
könnte. (Es sollen welche dabei sein, die Prolog mit ’ja’
beantworten würde und solche die Prolog mit ’nein’ beantworten
würde.)
4. Tauscht die Wissensbasis und die Anfragen (ohne die Antworten!)
mit einer anderen Gruppe und überlegt euch wie Prolog auf diese
Anfragen antworten würde.
Programmierkurs Prolog – p.12
Terme
Terme
einfache Terme komplexe Terme
Konstanten Variablen
Atome Zahlen
Atome butch, m monroe2, ’Vincent’, ’The Gimp’, ’ ’, ’@&
3$’, ;, :-, ===>
Zahlen 23, 1001, 0, -345
Variablen X, Variable, variable, X 234
Programmierkurs Prolog – p.13
Komplexe Terme
loves(vincent,mia)
Funktor (muss Atom sein) Argumente (beliebige Terme)
hide(X,father(father(father(butch))))
Programmierkurs Prolog – p.14
Komplexe Terme – Arität
Anzahl an Argument = Arität
loves(vincent,mia) Arität: 2
hide(X,father(father(father(butch)))) Arität: ?
Programmierkurs Prolog – p.15
Prädikate – Arität
Welche Prädikate werden von der folgenden Datenbasis definiert?
loves(vincent,mia).
loves(marcellus,mia).
jealous(marcellus,vincent).
jealous(marcellus,vincent,mia).
loves
jealous
jealous
loves/2
jealous/2
jealous/3
Programmierkurs Prolog – p.16
Zusammenfassung
Wir haben gesehen wie
Prologwissensbasen aussehen und wie
man Anfragen stellt.
Wichtige Begriffe: Terme, Atome, Variablen, komplexe Terme (Funktor,
Argumente, Arität), Fakten, Regeln (Kopf, Rumpf oder Körper),
Klauseln, Prädikate.
Nächste Woche: Wie findet Prolog die Antworten?
Programmierkurs Prolog – p.17