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

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

Fehler melden

X

Suche