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:

  1. Repräsentieren Sie die Angaben über Väter und Mütter als Prolog-Fakten
  2. Implementieren Sie die zweistellige Relation "geschwister" als Prolog-Regeln
  3. Geben Sie die Prolog-Anfragen und Antworten für die folgenden Fragen an:

Aufgabe 1.2 (6 Punkte):

Eine wichtige Datenstruktur in Prolog ist die Liste. Definieren Sie folgende Listenoperationen:

  1. Anhängen einer Liste List1 an das Ende einer anderen Liste List2 (Prädikat concat(List1, List2, ResultList))
  2. Umkehrung der Reihenfolge aller Elemente einer Liste (Prädikat reverse(List,ReversedList))
  3. Vektoraddition (Prädikat sum_vectors(List1,List2,SumList))
  4. Auswahl des maximalen Elementes aus einer Liste (Prädikat max_element(List,Max))
  5. Umwandeln einer Liste in eine Menge, d.h. Entfernen aller doppelt vorkommenden Elemente (Prädikat list_to_set(List,Set))
  6. Durchschnitt, Vereinigung und Differenz zweier Mengen (Prädikate intersection(M1,M2,M3), union(M1,M2,M3), diff(M1,M2,M3))
  7. 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:

    1. Implementieren Sie ein Prädikat merge/3, das zwei sortierte Listen zu einer wiederum sortierten Liste zusammenfaßt.
    2.   
    3. 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.)
    4. Benutzen Sie merge/3 und split/3 um mergesort(Unsortiert,Sortiert) zu implementieren.