Prolog Programmieren in Logik 4. Listen GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Inhalt - Programmstruktur • Einführung • Definition • Beispiele • Grundlegende Listenoperationen GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Einführung Eine Liste ist eine geordnete Folge von Elementen beliebiger Länge. Die Elemente können beliebige Terme sein: Konstanten, Variablen, Strukturen und auch andere Listen; sie können unterschiedliche Datentypen aufweisen. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Einführung Beispiel: [name('Klaus','Schmidt'),hat,3,Toechter]. Listenwurzel GK Info 13 (Hö) Struktur mit 2 Konstanten als Argumente Konstante hat Konstante 3 PROLOG – Eine Sprache der Künstlichen Intelligenz Variable Toechter Ende der Liste Definition Eine Liste besteht aus einem Kopfelement und einer Restliste, die beliebig lang (oder kurz) sein kann: [Kopf|Restliste] Damit ist eine Liste eine rekursive Datenstruktur! GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele [a,b,c,d,e,f] Liste mit 6 Elementen (Konstanten); feste Länge GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele [a|[e,f]] Liste mit Kopfelement a und Restliste [b,c]; variable Länge GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele [gelb|[]] Liste mit Kopfelement gelb und leerer Restliste offenbar hat diese Liste nur ein Element GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele ?- Y=[b,c,d], X=[a|Y]. macht aus der dreielementigen Liste Y die vierelementige Liste X=[a,b,c,d] GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele ?- [X|Y]=[a,b,c,d]. zerlegt die Liste [a,b,c,d] in den Kopf X=a und die Restliste Y=[b,c,d] GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele ?- [[a,b],[c,d],[e,f]]=[E|R]. liefert E=[a,b] und R=[[c,d],[e,f]] GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele ?- NeueListe = [a|Liste]. erzeugt eine neue Liste, die ein Element mehr enthält als die alte Liste. push-Operation GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Beispiele ?- [_|NeueListe] = Liste. entfernt das Kopfelement aus der Liste pop-Operation GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Aufgaben Lösen Sie die Aufgaben 13 bis 14. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 1 Übung: Es soll ein Prädikat erstes_element(X,Ls) definiert werden, das in X das erste Element der Liste Ls liefert. Lösung: erstes_element(X,[X|Rliste]). Idee: X ist erstes Element, wenn es Kopf der Liste Ls ist GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 1 Test: erstes_element(E,[x,y,z]). erstes_element(E,[[1,2],[3,4]]). erstes_element(X,[]). erstes_element(a,[X|[1,2,3]]). erstes_element(a,Liste). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 2 Übung: Es soll ein Prädikat letztes_element(X,Ls) definiert werden, das in X das letzte Element der Liste Ls liefert. Idee: • da wir nicht wissen, wie lang die Liste ist, verwenden wir die Rekursion • Rekursionsausstieg ist die einelementige Liste • das letzte Element einer mehrelementigen Liste ist das letzte Element der Restliste GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 2 Lösung: letztes_element(X,[X]). letztes_element(X,[K|Rs] :letztes_element(X,Rs). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 2 Test: letztes_element(L,[1,2,3]). letztes_element(L,[[1,2],[3,4],[5,6]]). letztes_element(L,[1]). letztes_element(X,[]). letztes_element(a,Liste). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Aufgabe Lösen Sie die Aufgabe 15. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 3 Übung: Es soll ein Prädikat element(X,Ls) definiert werden, das prüft, ob X Element der Liste Ls liefert. Idee: X ist Element einer Liste, • wenn es das erste Element ist • oder in der Restliste vorkommt. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 3 Lösung: element(X,[X|Rs]). element(X,[Y|Rs] :- element(X,Rs). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 3 Test: element(1,[1,2,3,2]). element(2,[1,2,3,2]). element(X,[1,2,3,2]). element(X,[[1,2],[3,2]]). element(1,Liste). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 4 Übung: Es soll ein Prädikat geloescht(X,Ls,Ms) definiert werden, das X vollständig aus der Liste Ls löscht und als Ergebnis die Liste Ms liefert. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 4 Idee: • die leere Liste ist der Rekursionsausstieg • jede andere Liste wird in Kopf und Restliste zerlegt • ist X gleich dem Kopf der Liste Ls, so ist Ms die Liste, die entsteht, wenn aus der Restliste das Element X gelöscht wird • ist X nicht der Kopf, so muss dieser beibehalten werden und aus der Restliste müssen alle möglicherweise vorkommenden Elemente X gelöscht werden GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 4 Lösung: geloescht(X,[],[]). geloescht(X,[X|Rs],Qs) :geloescht(X,Rs,Qs). geloescht(X,[Y|Rs],[Y|Qs]) :X\=Y, geloescht(X,Rs,Qs). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 4 Test: geloescht(a,[a,b,a,c,1,2,3],Zs). geloescht(2,[a,b,a,c,1,2,3],Zs). geloescht(4,[a,b,a,c,1,2,3],Zs). geloescht(a,[],Xs). geloescht(b,Xs,[]). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Aufgaben Lösen Sie die Aufgaben 16 bis 17. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 5 Übung: Es soll ein Prädikat anhaengen(As,Bs,Cs) definiert werden, das die Liste Cs durch Anhängen der Liste Bs an As erzeugt. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 5 Idee: • Rekursionsausstieg ist der Fall, dass die erste Liste leer ist • ist dies nicht der Fall, so ist der Kopf der ersten Liste sicher auch Kopf der Liste, die durch das Aneinander hängen entsteht • der Schwanz dieser Liste wird gebildet durch das Anhängen der zweiten Liste an den Schwanz der ersten Liste GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 5 Lösung: anhaengen([],Ls,Ls). anhaengen([X|As],Bs,[X,Cs]) :anhaengen(As,Bs,Cs). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Grundlegende Listenoperation 5 Test: anhaengen([a,b,c],[a,b],Ls). anhaengen(Xs,Ys,[1,2,3,4,5]). anhaengen([1,2],Xs,[1,2,3,4,5]). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz Aufgaben Lösen Sie die Aufgaben 18 bis 20. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz