Wiki source for PrologListen


Show raw source

=====Listen in Prolog=====

==a==Allgemeines==a==

[[http://gollem.science.uva.nl/SWI-Prolog/Manual/lists.html SWI-Prolog Listenmanipulation Teil 1 (library lists)]]
[[http://gollem.science.uva.nl/SWI-Prolog/Manual/builtinlist.html SWI-Prolog Listenmanipulation Teil 2 (built in)]]

Eine Liste in Prolog (engl. List) ist eine Liste aus Elementen z.B. ""[a,b,c,d,e]"".

Eine Liste besteht aus einem Kopfelement K und dem Rest ""R [K | R]. -> K = a, R = [b,c,d,e]""

Eine Menge (egl. Set) ist eine Liste mit einzigartigen Elementen. Die Elemente kommen jeweils nur einmal in der Liste vor.

[[SwiPrologListenPraedikate Prädikate zum manipulieren von Listen in SWI-Prolog]]


==a==Sortieren==a==

Liste sortieren (sort entfernt Duplikate, msort nicht)
%%(prolog)
msort([e, i, a, c, g, h, f, b, d ],A).
%%

==a==Umkehren==a==

Liste umkehren
%%(prolog)
reverse([a,b,c], L).
%%


==a==Ausgabe==a==

Die Elemente zeilenweise ausgeben
%%(prolog)
gib_aus([]).
gib_aus([H|T]):-writeln(H), gib_aus(T).
%%

Die Elemente zeilenweise, rückwärts ausgeben
%%(prolog)
gib_ausr([]).
gib_ausr([H|T]):-gib_ausr(T), writeln(H).
%%

Liste rückwärts ausgeben
%%(prolog)
gib_aus([ ]):-nl.
gib_aus([H|T]):-gib_aus(T),write(H).
%%


==a==Zusammenführen==a==

%%(prolog)
append([a,b],[c,d],L).
%%

Nachbildung von append
%%(prolog)
append2([],L,L).
append2([H|T],L,[H|M]):-append2(T,L,M).
?- append2([a,b,c],[d,e,f],L).
L = [a, b, c, d, e, f].
%%

==a==Trennen==a==

%%(prolog)
trennen(Lin,N,L1,L2):-append(L1,L2,Lin),length(L1,N),!.
?- trennen([a,b,c,d,e,f,g,h],5,L1,L2).
L1 = [a, b, c, d, e],
L2 = [f, g, h].
%%


==a==Löschen==a==

=a=delete=a=
Entfernt alle Elemente aus List1
%%(prolog)
delete(+List1, ?Elem, ?List2)
%%

=a=nur ein Element entfernen=a=
Entfernt nur ein Element
%%(prolog)
entferne(E, [E|R], R).
entferne(E, [K|R], [K|R2]):-entferne(E,R,R2),!.
%%

Zusatz für entferne, wenn entferne nicht Scheitern soll, wenn Element nicht vorhanden.
%%(prolog)
entferne(_,[],[]).
%%

=a=entferne_alle=a=
Entfernt alle Element unter Verwendung entferne
Identisch mit delete von SWI-Prolog
%%(prolog)
entferne_alle(E, Lin, Lin):-not(entferne(E,Lin,_)).
entferne_alle(E, Lin, Lout):-entferne(E,Lin,Lzw), entferne_alle(E, Lzw, Lout).
%%

Tests
%%(prolog)
?- entferne_alle(l,[h,a,l,l,o],L),!.
L = [h, a, o].
?- entferne(l,[h,a,l,l,o],L),!.
L = [h, a, l, o].
%%

=a=Mehrere Elemente gleichzeitig löschen=a=
delete_list_all(Liste1, Liste2, Liste3).
Alle Elemente aus Liste1 in Liste2 löschen und in Liste3 ausgeben.
%%(prolog)
delete_list_all([],Liste,Liste).
delete_list_all([H|T],Liste,Restliste):-delete_all(H,Liste,RestlisteTemp), delete_list_all(T,RestlisteTemp,Restliste).
?- delete_list_all([3,4,5],[1,1,2,2,3,3,4],X).
X = [1, 1, 2, 2] ;
%%


==a==Länge==a==

%%(prolog)
length([a,b,c], N).
%%

Nachbildung von length
%%(prolog)
length2([], 0).
length2([_|T], L):-length2(T, La), L is La + 1.
%%


==a==Findall==a==

findall(+Variable, +Ausdruck, +Liste)

Lege alle Variablen für die der Ausdruck gilt in der Liste ab.

%%(prolog)
zahl(1).
zahl(3).
zahl(7).
?- findall(N, zahl(N), L).
L = [1, 3, 7].
%%

==a==List Memebers==a==

=a=member=a=

Member of a list. Wahr, wenn Elem in der Liste vorhanden.
%%(prolog)
member(Elem, List).
%%

Gib die Liste aus
%%(prolog)
?- member(Elem, [1, a, [x,y] ]).
Elem = 1 ;
Elem = a ;
Elem = [x, y] ;
fail.
%%

=a=in_liste=a=

Nachbildung des Prädikats member
%%(prolog)
in_liste(Elem,[Elem|_]).
in_liste(Elem,[_|Tail]):-in_liste(Elem,Tail).
%%

=a=first=a=

%%(prolog)
first_elem(First,[First|_]).
%%

=a=last=a=

%%(prolog)
last_elem(Last,[Last]).
last_elem(Last,[_|Tail]):-last_elem(Last,Tail).
%%

=a=Get element by index=a=

Zugriff auf Element mit Index N, startend bei 1

%%(prolog)
gebi([K|_],1,K).
gebi([_|R],N,E):-M is N-1, gebi(R,M,E).
%%

%%(prolog)
?- gebi([a,b,c,d],3,E).
E = c
%%

=a=mem=a=

mem ( Struktur,Zugriffspfad,Teilstruktur)
%%(prolog)
gebi([K|_],1,K).
gebi([_|R],N,E):-M is N-1, gebi(R,M,E).
mem(Struktur,[],Struktur).
mem(Struktur,[H|T],Teilstruktur):-gebi(Struktur,H,StrukturTemp),mem(StrukturTemp,T,Teilstruktur).
%%

Test
%%(prolog)
?- mem ([a,[1,2,[x,y,z],[s,t,u,v,w],3],b,c], [2,3], X).
X = [x,y,z]
?- mem ([a,[1,2,[x,y,z],[s,t,u,v,w],3],b,c], [2,4,3], X).
X = u
%%


==a==Permutation==a==

Eine Liste mit Variablen (Lv) wird mit den Werten aus der Liste Le belegt.

permutation(+Lv, +Le).

%%(prolog)
permu(A,B,C):-permutation([A,B,C,_], [a,b,c,d]).
run:-permu(A,B,C), write(A), write(B), write(C).
%%


==a==Extremwerte==a==

Extremum innerhalb einer Liste (Skript S. 37) mittels Rekursion

%%(prolog)
maximum([K],K).
maximum([K|R],K):-maximum(R,M),K>M,!.
maximum([_|R],M):-maximum(R,M).
%%

%%(prolog)
minimum([K],K).
minimum([K|R],K):-minimum(R,M),K<M,!.
minimum([_|R],M):-minimum(R,M).
%%

Mittels Sortieren

%%(prolog)
max(Liste, Maximum) :-
sort(Liste, SortierteListe),
reverse(SortierteListe, [Maximum|_]).
%%

%%(prolog)
min(Liste, Minimum):-sort(Liste, [Minimum|_]).
%%


==a==Summe aller elemente==a==

%%(prolog)
summe([], 0).
summe([H|T], S):-summe(T, A), S is A + H.
%%

Mit Absicherung gegen nicht-numerische Listeninhalte

%%(prolog)
summe([], 0).
summe([H|T], S):-number(H), summe(T, A), S is A + H.
%%

Test
%%(prolog)
?- summe([1,-2,1,4.2,-1],S).
S = 3.2.
%%



----
Siehe auch {{backlinks}}
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki