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.