Kopf-Rest-Methode
Struktur einer Liste
Eine Liste ist entweder eine leere Liste, oder besteht aus einem ersten Element (dem sogenannten Kopfelement) und einer Restliste.
![Struktur einer Liste](https://inf-schule.de/content/8_deklarativ/3_logischeprogrammierung/3_datenverwaltung/2_station_listen/2_station_kopfrestmethode/struktur_liste.png)
Die leere Liste wird in Prolog mit leeren eckigen Klammern []
dargestellt.
Eine Aufteilung in ein Kopfelement K
und eine Restliste R
kann in Prolog in der Form [K|R]
dargestellt werden.
Bei der Festlegung von Prädikaten verwendet man häufig die
Fälle "leere Liste" - dargestellt durch []
- und "nicht-leere Liste"
- dargestellt durch [K|R]
. Ein erstes Beispiel hierzu zeigt die folgende Wissensbasis.
Wissensbasis:
leer([]).
nichtleer([K|R]).
Anfragen:
?- leer([]).
Yes
?- leer([a, b, c]).
No
?- nichtleer([]).
No
?- nichtleer([a, b, c]).
Yes
Variablenbindung bei Listen
Bei der Auswertung von Anfragen müssen u.a. Variablenbindungen erzeugt werden.
Wie geht die (Prolog-) Inferenzmaschine vor, wenn das Listenmuster [K|R]
in der Wissensbasis
benutzt wird?
Die folgenden Anfragen zeigen einige Ergebnisse.
?- [K|R] = [a, b, c].
K = a
R = [b, c] ;
No
?- [K|R] = [5].
K = 5
R = [] ;
No
?- [K|R] = [[1], [3]].
K = [1]
R = [[3]] ;
No
?- [E1, E2 | R] = [a, b, c].
E1 = a
E2 = b
R = [c] ;
No
?- [E1, E2 | R] = [a].
No
Aufgabe 1
Analysiere die oben gezeigten Ergebnisse und stelle Vermutungen auf, wie die folgenden Anfragen ausgewertet werden. Überprüfe anschließend deine Vermutungen.
?- [E|L] = [1, 2].
?- [K|R] = [].
?- [K|R] = [[], [1], [2, 3]].
?- [E1, E2, E3 | R] = [1, 2, 3].
?- [E1, E2, E3 | R] = [1, [2, 3]].