1 Einführung 2 Aufgaben - Softwaretechnik und Programmiersprachen

Werbung
Lehrstuhl für Softwaretechnik und Programmiersprachen
Professor Dr. Michael Leuschel
Sebastian Krings
Einführung in die logische Progammierung – Wintersemester 2014
Blatt 6
Besprechung der Aufgaben in der Übung am 16.12.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
Beweisen Sie die Aussage:
(∀x : (¬P (x) ⇒ Q(x)) ∧ ∃x : ¬Q(x)) ⇒ ∃x : P (x)
(1)
Aufgabe 2 (Differenzlisten)
Wie Sie in der Vorlesung gesehen haben, können Differenzlisten die Effizienz von Listenoperationen enorm
erhöhen.
a) Welche der folgenden Differenzlisten repräsentieren die gleiche Liste?
-
X
X
X
X
X
=
=
=
=
=
[a,b|[]]-[]
[a,b,c]-[c]
[a,b,c]-[c,d]
[a,b|R1]-[R1]
[a,b,c,d,e,f|R]-[d,e,f|R]
b) Schreiben Sie ein Prädikat toDL/3, das aus einer normalen Liste eine Differenzliste erzeugt. Das erste
Argument ist die normale Liste, die beiden weiteren Argumente stellen die Differenzliste dar.
Beispiel:
?- toDL([a,b,c], X, R).
X = [a,b,c|R]
yes
?- toDL([a,b],[a,b,c],[c]).
yes
?- toDL([a,b],X, [c,d]).
X = [a,b,c,d] ?
yes
c) Schreiben Sie dlconcat/3, das zwei Differenzlisten, die durch X-Y repräsentiert werden, konkateniert.
Beispiel:
?- dlconcat([a,b,c|A]-A,[d,e,f|B]-B, List).
A = [d,e,f|B],
List = [a,b,c,d,e,f|B]-B ?
yes
d) Schreiben Sie dlmember/2, dass sich analog zu member/2 für Differenzlisten verhält.
Aufgabe 3 (Polynome)
In dieser Aufgabe geht es um das symbolische Rechnen mit Polynomen. Polynome kann man in Prolog
z.B. durch Listen von Tupeln repräsentieren. Zum Beispiel kann man das Polynom 7x3 +8x2 −5x−1 durch
die Liste [(7, 3), (8, 2), (−5, 1), (−1, 0)] darstellen. In dieser Aufgabe sollen nur Polynome mit Potenzen
aus den natürlichen Zahlen betrachtet werden.
a) Entwerfen Sie ein Hilfsprädikat pol sort(Polynom, SortedPolynom), welches ein Polynom in obiger
Darstellung nimmt und die Summanden nach ihren Potenzen absteigend sortiert.
b) Schreiben Sie ein Prädikat pol add(Pol1, Pol2, SumPol), welches zwei Polynome addiert.
c) Schreiben Sie ein Prädikat pol mul(Pol1, Pol2, SumPol), welches zwei Polynome multipliziert.
d) Implementieren Sie das Prädikat pol diff(Pol, Diff), welches ein Polynom differenziert.
e) Schreiben Sie das Prädikat pol eval(Pol, Value, Result), welches ein Polynom Pol an der Stelle Value
auswertet.
Herunterladen