Hallo,
das hier ist die (eine) Lösung:
%H wie "head", T wie "tail"
nteselementcut([H|T],1,H,[],T).
nteselementcut([H|T],N,Element,[H|T1],Ende) :- M is (N-1),nteselementcut(T,M,Element,T1,Ende).
eltausch(Liste,N,M,GetauschteListe) :- N<M,nteselementcut(Liste,M,F,Davor1,Ende),nteselementcut(Davor1,N,E,Anfang,Mitte),nteselementcut(GetauschteListe,M,E,Davor2,Ende),nteselementcut(Davor2,N,F,Anfang,Mitte).
eltausch(Liste,N,M,GetauschteListe) :- N>M,eltausch(Liste,M,N,GetauschteListe),!.
Die Liste wird ungefähr so geteilt:
Bsp.:
Liste: [a,b,c,d,e,f,g,h,i,j]
N: 3
M: 7
Davor1: [a,b,c,d,e,f]
Ende: [h,i,j]
Anfang: [a,b]
Mitte: [d,e,f]
E: c
F: g
nteselementcut(Liste,N,X,Y) gibt einem von einer Liste das Element Nummer N, den Teil, der davor kommt (X), und den Teil, der danach kommt (Y).
So viel der Erklärung.
Viele Grüße
The User