Standardprädikate zur Listenbearbeitung

Aus Informatik
Wechseln zu: Navigation, Suche

Da die Verarbeitung von Listen grundlegend (für alle Programmiersprachen) ist, stellt der Prolog-Interpreter einige Standardprädikate zur Verfügung, die natürlich englische Bezeichnungen besitzen. Einige dieser Standardprädikate wurden schon unter anderem Namen im Abschnitt Listenoperationen hergeleitet oder sollen in den Übungsaufgaben hergeleitet werden.

Standardprädikate sind geschützte Bezeichner innerhalb von Prolog und dürfen deshalb nicht redefiniert werden.

Die folgenden nützlichen Standardprädikate werden hier aus Gründen der Vollständigkeit an dieser Stelle vorgestellt, ihre Arbeitsweise wird an kurzen Beispielen verdeutlicht.

member(X,L)
... entspricht dem hergeleiteten element(X,L) in einer Liste.
length(L,N)
... entspricht dem hergeleiteten laenge(L,N) einer Liste.
append(L1,L2,L3)
... entspricht dem hergeleitetem verketten(L1,L2,L3) von Listen.
delete(L1,X,L2)
... löscht alle Elemente X aus L1 und liefert L2. (Übungsaufgabe)
?- delete([1,5,3,4,3,6,1], 3, L2).
L2 = [1, 5, 4, 6, 1] ;
reverse(L1,L2)
... ist erfüllt, wenn die Reihenfolge der Elemente in L1 und L2 umgekehrt ist. (Übungsaufgabe)
?- reverse([a,l,f,5,j],L2).
L2 = [j, 5, f, l, a] ;

?- reverse([2,3,[5,3],9],L2).
L2 = [9, [5, 3], 3, 2] ;
flatten(L1,L2)
... transformiert die Liste L1 so, dass alle “inneren” Listen rekursiv aufgelöst werden.
?- flatten([a,[b, [c,d],[d,e],a],h], Ls).
Ls = [a, b, c, d, d, e, a, h] ;
sort(List,Sorted)
... liefert die sortierte Liste Sorted. Duplikate werden gelöscht:
?- sort([a,c,f,a,d,e,f],Sorted).
Sorted = [a, c, d, e, f] ;

?- sort([5,4,6,3,5,7,1,9],Sorted).
Sorted = [1, 3, 4, 5, 6, 7, 9] ;

?- sort([5,4,6,3,[5],7,1,9],Sorted).
Sorted = [1, 3, 4, 5, 6, 7, 9, [5]] ;

?- sort([5,4,6,3,[5,1],7,1,[5,1],9],Sorted).
Sorted = [1, 3, 4, 5, 6, 7, 9, [5, 1]] ;

?- sort([5,4,6,3,[1,5],7,1,[5,1],9],Sorted).
Sorted = [1, 3, 4, 5, 6, 7, 9, [1, 5], [5, 1]] ;

msort(List, Sorted)
... liefert die sortierte Liste Sorted. Duplikate werden nicht gelöscht:
?- msort([a,c,f,a,d,e,f], Sorted).
Sorted = [a, a, c, d, e, f, f] ;