Anfragen an die Wissensbasis

Die vorgegebene Wissensbasis

Wir gehen von einer Wissensbasis zur Welt der griechischen Götter aus:

Ausschnitt aus der griechischen Götterwelt

% Fakten
maennlich(cronus).
maennlich(zeus).
maennlich(poseidon).
maennlich(hades).
weiblich(rhea).
weiblich(demeter).
weiblich(hera).
weiblich(hestia).
kind(hestia, rhea).
kind(hades, rhea).
kind(poseidon, rhea).
kind(zeus, rhea).
kind(hera, rhea).
kind(demeter, rhea).
kind(hestia, cronus).
kind(hades, cronus).
kind(poseidon, cronus).
kind(zeus, cronus).
kind(hera, cronus).
kind(demeter, cronus).
% Regeln 
mutter(X, Y) :- kind(Y, X), weiblich(X). 
vater(X, Y)  :- kind(Y, X), maennlich(X).

Im Folgenden werden verschiedene Typen von Anfragen exemplarisch vorgestellt.

Wissensbasis einer Miniwelt aus Fakten und Regeln mit Anfragen[1]

Ja-Nein-Anfragen

Bei einer Ja-Nein-Anfrage wird überprüft, ob die getroffene Aussage bzgl. der Wissensbasis zutrifft oder nicht.

Beispiel 1: Ist Hera / Zeus weiblich?

?- weiblich(hera).

Yes
?- weiblich(zeus).

No

Man gibt hierzu die Anfrage hinter der Aufforderung "?-" ein. Beachte, dass eine Anfrage immer mit einem Punkt abgeschlossen werden muss. Nach Eingabe der Return-Taste wertet der Prolog-Interpreter die Anfrage aus und liefert "Yes" oder "No" als Ergebnis.

Ergänzungsanfragen

Ergänzungsanfragen werden mit Hilfe von Variablen gestellt. Der Prolog-Interpreter soll als Antwort alle möglichen Variablenbelegungen bestimmen, die die Anfrage erfüllen.

Beispiel 2: Wer ist der Vater von Zeus?

?- vater(V, zeus).

V = cronus ;

No

Im ersten Beispiel erhält man zunächst die Antwort V = cronus. Der Prolog-Interpreter wartet anschließend auf das Drücken der Return-Taste, um nach weiteren Antworten zu suchen. Im vorliegenden Fall findet er keine weiteren Antworten und meldet das mit der Antwort No.

Beispiel 3: Wer ist Kind von Rhea?

?- kind(K, rhea).

K = hestia ;

K = hades ;

K = poseidon ;

K = zeus ;

K = hera ;

K = demeter ;

No

Beispiel 4: Wer ist Mutter von wem?

?- mutter(X, Y).

X = rhea
Y = hestia ;

X = rhea
Y = hades ;

X = rhea
Y = poseidon ;

X = rhea
Y = zeus ;

X = rhea
Y = hera ;

X = rhea
Y = demeter ;

No

In einer Anfrage können auch mehrere Variablen vorkommen. Der Prolog-Interpreter bestimmt hier sämtliche Variablenbelegungen, die gemäß Datenbasis die Anfrage erfüllen.

Anfragen mit anonymen Variablen

Anonyme Variablen beginnen mit einem Unterstrich. Anonyme Variablen werden benutzt, wenn man an den Variablenwerten selbst nicht interessiert ist.

Beispiel 5: Wer ist Vater (von einem Kind)?

?- vater(V, _Kind).

V = cronus ;

V = cronus ;

V = cronus ;

V = cronus ;

V = cronus ;

V = cronus ;

No

Beachte, dass hier das Ergebnis V = cronus mehrfach ausgegeben wird, da Cronus Vater mehrerer Kinder ist. Die jeweiligen Werte der anonymen Variablen _Kind werden hier nicht angezeigt.

Zusammengesetzte Anfragen

Eine Anfrage kann auch aus mehreren Teilanfragen bestehen. Diese werden mit einem Komma (zu deuten als logisches Und) abgetrennt.

Beispiel 6: Wer ist weiblich und hat einen Vater?

?- weiblich(Tochter), vater(_Vater, Tochter).

Tochter = demeter ;

Tochter = hera ;

Tochter = hestia ;

No

Aufgabe 1

Erweitere die oben gezeigte Wissensbasis um folgende Fakten und Regeln:
Ausschnitt aus der griechischen Götterwelt

maennlich(ares).
weiblich(hebe).
maennlich(hephaestus).
kind(ares, hera).
kind(ares, zeus).
kind(hebe, hera).
kind(hebe, zeus).
kind(hephaestus, hera).
kind(hephaestus, zeus).
vorfahr(X, Y) :- kind(Y, X).
vorfahr(X, Y) :- kind(Y, Z), vorfahr(X, Z).

Entwickle geeignete Anfragen und teste sie.

(a) Wer ist ein männlicher Vorfahr von Hebe?

(b) Wer ist Mutter und hat einen weiblichen Vorfahr?

(c) Wer ist Vorfahr eines Vaters?

Aufgabe 2

Vervollständige die Wissensbasis und kläre mit geeigneten Anfragen die folgenden Verwandschaftsbeziehungen:

(a) Wer ist ein Cousin von Zeus?

(b) Hat Zeus auch mit Cousinen Kinder gezeugt?

(c) Welche Halbbrüder und Halbschwestern hat Hermes?

Quellen

X

Fehler melden

X

Suche