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.
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]].