[2,4,8,6] [berta,anton,frieda] [2,peter,5,anton] [2,[4,1]5,[a,b,c]] (Elemente: 2, Liste [4,1], 5, Liste [a,b,c])
Durch den Selektor | lässt sich das erste Listenelement abspalten:
[4,2,6,1] = [A|R] liefert als A 4 und als R die Restliste [2,6,1] [x,y,w,v] = [_|R] liefert als R die Restliste [y,w,v]
Der Selektor kann genutzt werden, um am Listenanfang ein neues Element einzuhängen:
Ist A = ab und R = [2,3,4], so erzeugt L = [A|R] die Liste L = [ab,2,3,4].
Durch rekursive Prädikate lassen sich auch die übrigen Elemente erreichen, bzw. neue Elemente an beliebigen Positionen einfügen. SWI-Prolog stellt vordefinierte Prädikate zur Verfügung, mit denen sich eigene Prädikate ersetzen lassen (Auswahl):
|
append(A,B,C) nth1(I,L,E) select(E,L,R) |
wahr, wenn Vereinigung der Listen A und B die Liste C ist wahr, wenn E das I-te Element der Liste L ist wahr, wenn E Element der Liste L ist und R die nachfolgende Restliste |
Wenn einer der Parameter noch keinen konkreten Wert hat, versucht Prolog, dem Parameter einen Wert zuzuordnen, so dass das Prädikat wahr wird. Dies kann man nutzen, um Elemente an der gewünschten Position einzufügen oder auszulesen:
Beispiele: [A|_]=[1,2,3,4,5] liefert A = 1 [_|R]=[1,2,3,4,5] liefert R = [2,3,4,5]
Im folgenden soll mit einfachen Progrmmen gezeigt werden, wie man auch ohne die zusätzlichen Prädikate von SWI-Prolog verschiedene Aufgaben lösen kann.
|
Element E am Listeanfang einfügen: ins(E,L,[E|L]).
Element E am Listenende einfügen:
Element E suchen:
Element A durch N ersetzen:
chg(A,_,_,_).
Element E löschen:
Sortieren: |
aus E und Liste L neue Liste mit E am Anfang
ist E der Listenanfang, so ist elem wahr
ist die Liste leer, dann keine Aktion |