i

Anfragen an die Wissensbasis

Die vorgegebene Wissensbasis

Unser Ziel ist, Ergebnisse, wie beispielsweise Verwandschaftsbeziehungen, automatisiert aus der Wissensbasis herauszufiltern. Wir gehen von der Wissensbasis zur Welt der Halbgötter aus:

Stammbaum der Halbgötter[1]
% Fakten
maennlich(cronus).
maennlich(zeus).
maennlich(poseidon).
maennlich(hades).
maennlich(ares).
maennlich(hephaistos).
maennlich(percy).
maennlich(tyson).
maennlich(nico).
maennlich(malcolm).
maennlich(frank).
maennlich(jake).
maennlich(leo).
maennlich(charles).
maennlich(harley).
maennlich(chris).

weiblich(rhea).
weiblich(hera).
weiblich(demeter).
weiblich(athena).
weiblich(hazel).
weiblich(bianca).
weiblich(miranda).
weiblich(katie).
weiblich(annabeth).
weiblich(clarissa).
weiblich(thalia).

kind(hera,cronus).
kind(hera,rhea).
kind(zeus,cronus).
kind(zeus,rhea).
kind(poseidon,cronus).
kind(poseidon,rhea).
kind(hades,cronus).
kind(hades,rhea).
kind(demeter,cronus).
kind(demeter,rhea).
kind(athena,zeus).
kind(athena,hera).
kind(ares,zeus).
kind(ares,hera).
kind(hephaistos,zeus).
kind(hephaistos,hera).
kind(percy,poseidon).
kind(tyson,poseidon).
kind(nico,hades).
kind(hazel,hades).
kind(bianca,hades).
kind(miranda,demeter).
kind(katie,demeter).
kind(annabeth,athena).
kind(malcolm,athena).
kind(clarissa,ares).
kind(frank,ares).
kind(jake,hephaistos).
kind(leo,hephaistos).
kind(charles,hephaistos).
kind(harley,hephaistos).
kind(chris,hephaistos).
kind(thalia,zeus).

Wir erinnern uns, dass Percy herausfinden soll, welche Halbgötter an welchem Unterrichtsfach teilnehmen:

Stundenplan der Halbgötter[2]

Anfragen an die Wissensbasis

Schließt ein Fach nur männliche oder nur weibliche Schüler mit ein, benötigen wir eine Anfrage, die das Geschlecht einer Person überprüft.

Beispiel 1: Ist Hera / Zeus weiblich?

?- weiblich(hera).

true.
?- weiblich(zeus).

false.

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 überprüft der Prolog-Interpreter, ob die Anfrage erfüllt ist und liefert "true." oder "false." als Ergebnis oder je nach Version auch einen Punkt.

Aufgabe 1

Unterrichtsfach: Kampfsport (Alle Enkel von Cronus)
Gehe davon aus, dass bekannt ist, dass Percy, Tyson, Nico, Hazel, Bianca, Hephaistos, Athena, Ares, Thalia, Miranda und Katie die Enkelinnen und Enkel von Cronus sind. Unbekannt ist allerdings, welche der genannten Halbgötter männlich und welche weiblich sind.

Gib Anfragen an die Wissensbasis an, mit denen man herausfindet, welche Halbgötter die (männlichen) Enkel von Cronus sind und somit am Kampfsporttraining teilnehmen.

Anfragen mit Variablen

Nun interessiert uns nicht nur das Geschlecht der Halbgötter, sondern vor allem wie sie zueinander in Beziehung stehen. Dazu benutzt man Variablen, für die der Prolog-Interpreter alle möglichen Belegungen ausgibt, die erfüllt sind.

Beispiel 2: Wer ist ein Elternteil von Zeus?

?- kind(zeus,ELTERNTEIL).

ELTERNTEIL = cronus ;
ELTERNTEIL = rhea ;
false.

Beachte, dass Konstanten immer mit Kleinbuchstaben und Variablen mit Großbuchstaben beschrieben werden. In dem Beispiel erhält man zunächst die Antwort ELTERNTEIL = cronus. Der Prolog-Interpreter wartet anschließend auf das Drücken der Return-Taste, um nach weiteren Antworten zu suchen. Gibt es keine weiteren Belegungen, die erfüllt sind, zeigt false. das Ende der Ausgabe an.

Aufgabe 2

a) Unterrichtsfach: Segeln (Alle Kinder von Poseidon)
Gib eine Anfrage an, die alle Halbgötter ausgibt, die am Unterrichtsfach Segeln teilnehmen.

b) Unterrichtsfach: Mysterienkunde (Alle Nachfahren von Zeus)
Gib alle Anfragen an, die benötigt werden, um die Teilnehmer von Mysterienkunde auszugeben.

c) Teste mit einer Anfrage was passiert, wenn in einer Anfrage mehrere Variablen vorkommen (z.B. ELTERNTEIL und KIND).

Zusammengesetzte Anfragen

Eine Anfrage kann auch aus mehreren Teilanfragen bestehen. Diese werden mit einem Komma oder einem Semikolon getrennt.

Beispiel 3: Wer sind die Kinder von ... ?

?- kind(KIND,zeus),kind(KIND,hera).

KIND = athena ;
KIND = ares ;
KIND = hephaistos ;
false.
?- kind(KIND,zeus);kind(KIND,hera).

KIND = thalia ;
KIND = athena ;
KIND = ares ;
KIND = hephaistos ;
KIND = athena ;
KIND = ares ;
KIND = hephaistos ;
false.

Nach mehrfacher Eingabe der Return-Taste gibt der Prolog-Interpreter alle Ergebnisse aus, die die zusammengesetzte Anfrage erfüllen.

Aufgabe 3

a) Vergleiche die Ausgaben der beiden oben angegebenen Anfragen und erläutere die unterschiedliche Bedeutung von "," und ";".

b) Unterrichtsfach: Reiten (alle Töchter von Hades)
Gib eine Anfrage an, die alle Halbgötter ausgibt, die am Unterrichtsfach Reiten teilnehmen.

Anfragen mit anonymen Variablen

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

Beispiel 4: Wer ist Vater eines Kindes?

?- kind(KIND, VATER), maennlich(VATER).

KIND = thalia,
VATER = zeus ;
KIND = hera,
VATER = cronus ;
KIND = zeus,
VATER = cronus ;
KIND = poseidon,
VATER = cronus ;
KIND = hades,
VATER = cronus ;
KIND = demeter,
VATER = cronus ;
KIND = athena,
VATER = zeus ;
KIND = ares,
VATER = zeus ;
KIND = hephaistos,
VATER = zeus ;
KIND = percy,
VATER = poseidon ;
KIND = tyson,
VATER = poseidon ;
KIND = nico,
VATER = hades ;
KIND = hazel,
VATER = hades ;
KIND = bianca,
VATER = hades ;
KIND = clarissa,
VATER = ares ;
KIND = frank,
VATER = ares ;
KIND = leo,
VATER = hephaistos ;
KIND = charles,
VATER = hephaistos ;
KIND = harley,
VATER = hephaistos ;
KIND = chris,
VATER = hephaistos ;
?- kind(_, VATER), maennlich(VATER).

VATER = zeus ;
VATER = cronus ;
VATER = cronus ;
VATER = cronus ;
VATER = cronus ;
VATER = cronus ;
VATER = zeus ;
VATER = zeus ;
VATER = zeus ;
VATER = poseidon ;
VATER = poseidon ;
VATER = hades ;
VATER = hades ;
VATER = hades ;
VATER = ares ;
VATER = ares ;
VATER = hephaistos ;
VATER = hephaistos ;
VATER = hephaistos ;
VATER = hephaistos ;

Beachte, dass hier zum Beispiel das Ergebnis VATER = cronus mehrfach ausgegeben wird, da Cronus Vater mehrerer Kinder ist.

Aufgabe 4

a) Vergleiche die beiden oben angegebenen Anfragen mit ihren Ausgaben und erläutere, was passiert, wenn man die Variable KIND durch _ ersetzt.

b) Gib eine Anfrage an, die alle Halbgöttinnen ausgibt, die Tochter von jemandem sind (das jeweilige Elternteil ist an dieser Stelle nicht von Bedeutung und soll nicht mit ausgegeben werden).

Aufgabe 5

Beachte, dass es bei der Verwendung anonymer Variablen zu Problemen kommen kann!

a) Teste die folgenden beiden Anfragen und gib in einem Satz ihre jeweilige Bedeutung an.

?- kind(SOHN, hera), maennlich(SOHN).
?- kind(_, hera), maennlich(_).

b) Teste die beiden oben angegebenen Anfragen für Demeter und gib an, wo hierbei Probleme auftauchen können.

Quellen

Suche

v
100.131.1.5
inf-schule.de/entwuerfe/Deklarative_Programmierung/modellierungwissen/station_anfragen
inf-schule.de/100.131.1.5
inf-schule.de/@/page/RPISCgdyzKsQn8dJ

Rückmeldung geben