Liste - Informatik

Werbung
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
Herunterladen