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