Prolog Listen Operationen

Die Wichtigsten Listen-Operationen mit Prolog: Suche in einer Liste, Liste in Teillisten auftrennen, Listen miteinander verketten, Liste sortieren



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
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
% 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
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
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
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
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
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