Universität Dortmund
Lehrstuhl Informatik VIII
Stefan Haustein
Wintersemester 2000 |
2000-10-18 |
Übungsblatt 1 zur Vorlesung Künstliche Intelligenz
Abgabe bis Do., 26.10.2000, Briefkasten LS VIII im Eingangsbereich GB IV
Aufgabe 1.1 (3 Punkte):
Erwin Erbschleicher baut gerade seinen
InternetservicemyVerwandschaft.com auf. Für den
Prototypen möchte er einen Teil seiner eigenen
Verwandschaftsbeziehungen als Menge von Prolog-Fakten modellieren:
Peter und Ariane sind Eltern von Sabine und Erwin, Karlheinz und Vera
sind die Eltern von Peter und Gustav. Helmut ist derVater von
Karlheinz. Gundula ist die Mutter von Ariane. Helfen Sie Erwin, indem
Sie die folgenden Aufgaben bearbeiten:
- Repräsentieren Sie die Angaben über Väter und Mütter als Prolog-Fakten
- Implementieren Sie die zweistellige Relation "geschwister" als Prolog-Regeln
- Geben Sie die Prolog-Anfragen und Antworten für die folgenden Fragen an:
- Wer ist Peters Vater?
- Wessen Grossvater ist Helmut?
- Welche Geschwister hat Gustav?
Aufgabe 1.2 (6 Punkte):
Eine wichtige Datenstruktur in Prolog ist die Liste.
Definieren Sie folgende Listenoperationen:
- Anhängen einer Liste List1 an das Ende einer anderen Liste List2 (Prädikat concat(List1, List2, ResultList))
- Umkehrung der Reihenfolge aller Elemente einer Liste
(Prädikat reverse(List,ReversedList))
- Vektoraddition
(Prädikat sum_vectors(List1,List2,SumList))
- Auswahl des maximalen Elementes aus einer Liste (Prädikat
max_element(List,Max))
- Umwandeln
einer Liste in eine Menge, d.h. Entfernen aller
doppelt vorkommenden Elemente (Prädikat
list_to_set(List,Set))
- Durchschnitt, Vereinigung und Differenz zweier Mengen
(Prädikate intersection(M1,M2,M3),
union(M1,M2,M3), diff(M1,M2,M3))
Aufgabe 1.3 (3 Punkte):
Viele Listenfunktionen stehen in den Libraries basics,
lists und listparts zur Verfügung. Sie werden
mit dem Befehl :- [library(basics)]. etc. eingebunden.
Hinweise zu Listen erhalten Sie mit help(lists).
Implementieren Sie Mergesort in Prolog. Hilfe: Gehen Sie dabei
wie folgt vor:
- Implementieren Sie ein Prädikat merge/3,
das zwei sortierte Listen zu einer wiederum sortierten
Liste zusammenfaßt.
- Implementieren Sie ein Prädikat split/3,
das eine Liste in zwei gleichlange (+-1) Listen aufspaltet. (Tip:
Mit [H1,H2|Rest] erhält man die ersten
beiden Elemente einer Liste.)
- Benutzen Sie merge/3 und split/3 um
mergesort(Unsortiert,Sortiert) zu
implementieren.