Blatt 3

Transcrição

Blatt 3
Lehrstuhl für Softwaretechnik und Programmiersprachen
Professor Dr. Michael Leuschel
Sebastian Krings
Einführung in die logische Progammierung – Wintersemester 2014
Blatt 1
Besprechung der Aufgaben in der Übung am 18.11.2014. Sollten Sie an der Übung am
Dienstag nicht teilnehmen können und die Aufgaben besprechen wollen, melden Sie bitte
nach Absprache bei Sebastian Krings.
1
Einführung
Die Übungsblätter sind unbenotet und nicht verpflichtend.
Auf Wunsch können bearbeitete Blätter zur Korrektur abgegeben werden. Diese werden dann bis zur
Übung zurück gegeben. Nutzen Sie diese Möglichkeit, wenn Sie sich unsicher sind oder Fragen haben!
Bei Fragen wenden Sie sich bitte an Sebastian Krings: [email protected].
2
Aufgaben
Aufgabe 1 (Binärbäume)
Schreiben Sie die drei Prädikate
• inoder/1, das einen Baum in in-order Reihenfolge ausgibt.
• postorder/1, das einen Baum in post-order Reihenfolge ausgibt.
• preorder/1, das einen Baum in pre-order Reihenfolge ausgibt.
Verwenden Sie die gleiche Baumdarstellung wie in der Vorlesung.
Aufgabe 2 (Listen)
Schreiben Sie eine Prädikat flatten/1, dass eine Liste von Listen in eine flache Liste überführt.
Beispiele sind:
1
2
3
flatten ([ a ,b , c ] ,[a ,b , c ]) .
flatten ([[ a ,[ b , c ]]] ,[ a ,b , c ]) .
flatten ([ a ,b ,[ c ] ,[d , e ] ,[[ f ] , g ]] ,[ a ,b ,c ,d ,e ,f , g ]) .
Aufgabe 3 (Nibelungen)
Implementieren Sie die folgenden Fakten in Prolog:
1. Siegfried liebt Krimhild und mag Gunther.
2. Krimhild liebt Siegfried und haßt Brunhild.
3. Gunther liebt Brunhild und mag Krimhild und Hagen.
4. Brunhild haßt Siegfried, Gunther und Krimhild.
5. Hagen haßt Siegfried und alle, die Siegfried lieben.
6. Brunhild mag alle, die Siegfried hassen.
7. Alberich haßt alle, mit Ausnahme von sich selbst.
Beantworten Sie dann die folgenden Fragen mit Hilfe einer Anfrage:
1. Wen mag Brunhild?
2. Wer hasst Siegfried?
3. Welche Paare1 könnte man bilden?
Aufgabe 4 (Noch mehr Schafe)
Eine neue Anforderung hat eine Umstrukturierung der Schafdatenbank zur Folge: Alle Schafe werden
nun mittels Fakten sheep/3 gespeichert, wobei das erste Argument den Namen des Schafs, das zweite das
Geschlecht (female/male) und das dritte eine Liste von beliebigen Besonderheiten angibt.
Die Beispieldatensätze aus sehen jetzt wie folgt aus:
1
2
3
4
5
sheep ( dolly , female ,[]) .
sheep ( haba , female ,[ blue , mobile ]) .
sheep ( doerte , female ,[ scrapy ]) .
sheep ( friedrich , male ,[]) .
sheep ( gunter , male ,[ black ]) .
a) Passen Sie die Prädikate sheep/1, mother/2, father/2 und ancestor/2 so an, dass sie mit der Änderung
funktionieren.
b) Implementieren Sie ein Prädikat related/2, das angibt, ob zwei Schafe miteinander verwandt sind.
c) Implementieren Sie ein Prädikat search/3, das ausgehend von einem Schaf ein verwandtes Schaf sucht,
das eine gegebene Eigenschaft hat. Z.B. soll die Anfrage search(haba,black,S). ein schwarzes Schaf in
der Familie von Schaf haba suchen.
d) Schreiben Sie ein Prädikat relation/3, das zu zwei Schafen die Art der Verwandtschaft ausgibt. Ein
Beispiel:
1
2
? - relation ( ernst , lena , X ) .
X = [ son , daughter , father ]
soll bedeuten, dass ernst Sohn der Tochter des Vaters von lena ist. Als direkte Verwandtschaftsverhältnisse sollen ausschließlich mother, father, daughter und son dienen.
1 Zwei
Personen die sich lieben ;-)