| Titel: | Prolog Listen Operationen | |
| Beschreibung: | Die Wichtigsten Listen-Operationen mit Prolog: Suche in einer Liste, Liste in Teillisten auftrennen, Listen miteinander verketten, Liste sortieren | |
| Kategorie: | Programmierung | |
| Unterkategorie | Prolog | |
| Benötigtes Fachwissen: | Fortgeschrittene | |
| Artikel überarbeiten: | Prolog Listen Operationen | |
Prolog Listen
Hier finden Sie Programmbeispiele zu den wichtigsten Operationen beim Umgang mit Listen in Prolog.
Suche, ob alle Elemente in Liste A auch in Liste B vorkommen
suche( [], _ ).
suche( [H|T], ListeB ) :- member( H, ListeB ), suche( T, ListeB ).
|?- suche( [eins, zwei, drei], [null, eins, zwei, drei, vier] ).
% Ausgabe:
% yes
Liste anhand eines Trennzeichens in zwei Teillisten zerlegen
suche( [H|T], ListeB ) :- member( H, ListeB ), suche( T, ListeB ).
|?- suche( [eins, zwei, drei], [null, eins, zwei, drei, vier] ).
% Ausgabe:
% yes
zerlege( _, [], [], [] ) :- !
zerlege( X, [H|T], [], T ) :- !
zerlege( X, [H|T], [H|R1], R2 ) :- zerlegen( X, T, R1, R2 ).
|?- zerlege(/, [n,a,m,e,/,v,o,r,n,a,m,e], Liste1, Liste2 ).
% Ausgabe:
% Liste1 = [n,a,m,e]
% Liste2 = [v,o,r,n,a,m,e]
Liste anhand beliebig vieler Trennzeichen in Teillisten zerlegen
zerlege( X, [H|T], [], T ) :- !
zerlege( X, [H|T], [H|R1], R2 ) :- zerlegen( X, T, R1, R2 ).
|?- zerlege(/, [n,a,m,e,/,v,o,r,n,a,m,e], Liste1, Liste2 ).
% Ausgabe:
% Liste1 = [n,a,m,e]
% Liste2 = [v,o,r,n,a,m,e]
% Listendefinition aus obiger Beispiel
zerlege( _, [], [], [] ) :- !
zerlege( X, [H|T], [], T ) :- !
zerlege( X, [H|T], [H|R1], R2 ) :- zerlegen( X, T, R1, R2 ).
% Inklusive neuer Listendefinition
zerlege( _, [], [] ) :- !.
zerlege( X, L, [E|S] ) :- zerlege( X, L, E, R ), zerlege( X, R, S ).
|?- zerlege( /, [n,a,m,e,/,p,l,z,/,o,r,t], M).
% Ausgabe:
% M = [ [n,a,m,e], [p,l,z], [o,r,t] ]
Summe einer Liste berechnen
zerlege( _, [], [], [] ) :- !
zerlege( X, [H|T], [], T ) :- !
zerlege( X, [H|T], [H|R1], R2 ) :- zerlegen( X, T, R1, R2 ).
% Inklusive neuer Listendefinition
zerlege( _, [], [] ) :- !.
zerlege( X, L, [E|S] ) :- zerlege( X, L, E, R ), zerlege( X, R, S ).
|?- zerlege( /, [n,a,m,e,/,p,l,z,/,o,r,t], M).
% Ausgabe:
% M = [ [n,a,m,e], [p,l,z], [o,r,t] ]
summe( [], 0 ) :- !.
summe( [H|T], S ) :- summe( T, S1 ), S is H + S1.
|?- summe( [2,3,4], S ).
% Ausgabe:
% S = 9
Zwei Listen miteinander verketten
summe( [H|T], S ) :- summe( T, S1 ), S is H + S1.
|?- summe( [2,3,4], S ).
% Ausgabe:
% S = 9
verkette( [], L2, L2 ).
verkette( [H|T1], L2, [H|T] ) :- verkette( T1, L2, T ).
|?- verkette( [1,2,3,4,5], [4,6,1], L ).
% Ausgabe:
% L = [1,2,3,4,5,4,6,1]
Zwei Listen miteinander verketten, jedes Element dabei nur einmal speichern
verkette( [H|T1], L2, [H|T] ) :- verkette( T1, L2, T ).
|?- verkette( [1,2,3,4,5], [4,6,1], L ).
% Ausgabe:
% L = [1,2,3,4,5,4,6,1]
vereinigung( [], L2, L2 ).
vereinigung( [H|T1], L2, L ) :- member( H, L2 ), !, vereinigung( T1, L2, L ).
vereinigung( [H|T1], L2, [H|T] ) :- vereinigung( T1, L2, T ).
|?- vereinigung( [1,2,3,4,5], [4,6,1], L ).
% Ausgabe:
% L = [2,3,5,4,6,1]
Zahlen aufsteigend sortiert in Liste einfügen
vereinigung( [H|T1], L2, L ) :- member( H, L2 ), !, vereinigung( T1, L2, L ).
vereinigung( [H|T1], L2, [H|T] ) :- vereinigung( T1, L2, T ).
|?- vereinigung( [1,2,3,4,5], [4,6,1], L ).
% Ausgabe:
% L = [2,3,5,4,6,1]
insert( X, [], [X] ) :- !.
insert( X, [H|R], [X,H|R] ) :- X =< H, !.
insert( X, [H|R], [H|T] ):- insert( X, R, T ).
|?- insert(4, [1,3,8,9], M).
% Ausgabe:
% M = [1,3,4,8,9]
Unsortierte Liste sortieren
insert( X, [H|R], [X,H|R] ) :- X =< H, !.
insert( X, [H|R], [H|T] ):- insert( X, R, T ).
|?- insert(4, [1,3,8,9], M).
% Ausgabe:
% M = [1,3,4,8,9]
insertSort( [], [] ).
insertSort( [X|R], G ) :- insertSort( R, T ), insert( X, T, G ).
|?- insertSort( [4,2,1,6,5,3], G ).
% Ausgabe:
% G = 1,2,3,4,5,6
insertSort( [X|R], G ) :- insertSort( R, T ), insert( X, T, G ).
|?- insertSort( [4,2,1,6,5,3], G ).
% Ausgabe:
% G = 1,2,3,4,5,6