Prolog-Übung 2 24.11.2009 1) Rätsel:

Werbung
Prolog-Übung 2
24.11.2009
1) Rätsel:
Gegeben sind folgende 6 Wörter:
abalone, abandon, anagram, connect, elegant, enhance
Formulieren Sie ein Prädikat kreuzwort/6, welches alle möglichen Anordnungen dieser
Wörter in folgendem Raster angibt:
Die ersten 3 Argumente sollten dabei den vertikalen Wörtern entsprechen, die letzten 3
Argumente sollen den horizontalen Wörtern entsprechen.
Tipp: Überlegen Sie zu Beginn, welche Eigenschaften die einzelnen Buchstaben der
Wörter erfüllen müssen,d amit sie in das Raster passen.
2) Peano-Axiome
a) Implementieren Sie die in der Vorlesung besprochene Defintion der natürlichen
Zahlen mit Hilfe der Peano-Axiome in Prolog.
Definieren Sie weiters:
•
Ein Prädikat add/2, welches 2 natürliche Zahlen unter Verwendung der PeanoArithmetik addiert.
•
Ein Prädikat mult/2, welches 2 natürliche Zahlen unter Verwendung der PeanoArithmetik multipliziert.
•
Ein Prädikat kleiner_als/2, welches “true” liefert, wenn eine Zahl X kleiner als eine
Zahl Y ist, andernfalls “false”.
Gestalten sie die Prädikate add/2, mult/2, kleiner_als/2 so, dass Ein- und
der Zahl in “Peano-Schreibweise” erfolgen.
Ausgabe
b) Definieren Sie:
•
Ein Prädikat encode/2, welches eine beliebige nat. Zahl in “Peano-Schreibweise”
ausgibt.
•
Ein Prädikat decode/2, welches eine Zahl in “Peano-Schreibweise” in die
zugehörige nat. Zahl in “normaler” Schreibweise umwandelt.
•
Gestalten sie unter Verwendung der beiden Prädikate encode/2 und decode/2 eine
alternative Version der Prädikate add/2, mult/2, kleiner_als/2, sodass Ein- und
Ausgabe der Zahlen in “normaler” Schreibweise erfolgen kann.
3) Entwerfen Sie ein “Sicherheitssystem” für folgendes Bürogebäude:
a) Halten Sie die Topologie des Büros in einem Prolog-Programm fest. Nach der
Fertigstellung wollen wir mit der folgenden Abfrage feststellen können, ob zwei Räume
verbunden sind:
% Sind Raum a und b verbunden?
?- tuer(a, b).
true
b) Wenn eine Tür von a nach b geht, geht diese natürlich auch von b nach a. Stellen Sie
sicher, dass Ihr Programm dies unterstützt. Stellen Sie weiterhin sicher, dass Abfragen
wie tuer(X, a) ebenfalls funktionieren.
Ein Hinweis: Eine triviale Lösung wäre es, jede Tür zweimal in die Datenbank a
aufzunehmen (für beide Richtungen). Versuchen Sie, eine Lösung ohne Redundanz
zu finden.
Folgende Aufgaben erst nach der Vorlesung vom Mittwoch, dem 24.11.2009 (Thema
Listen in Prolog).
c) Erstellen Sie eine Regel erreichbar(Raum1, Raum2), die true ergibt, wenn zwei
Räume verbunden sind.
Erstellen Sie eine Regel erreichbar(Raum1, Raum2, Weg), die den Weg (bzw. Alle
möglichen Wege) zwischen zwei Räumen ausgibt. Benutzen Sie dafür Listen, sowie die
eingebaute member-Funktion (mehr dazu in Prolog mittels ?-help(member)).
c) Nun sollen Nutzer eingeführt werden, die nur Zugang zu bestimmten Räumen haben.
Entwickeln Sie eine Datenstruktur, welche die Benutzungsrechte festhält. Definieren
sie die Rechte für 2 fiktive Benutzer.
e) Nutzer müssen von Außerhalb (also “outside” im Plan) zu den Räumen kommen, zu
denen sie Zugang haben. Schreiben Sie also ein Programm das prüft, ob ein Nutzer zu
einem Raum Zugangsrechte hat, und diesen Raum auch von outside erreichen kann
(der Nutzer muss also auch für alle Räume, die zwischen outside und dem Raum l
iegen, Zugangsrechte haben).
Herunterladen