Tausch zweier Elemente (Prolog)

  • Hallo,


    muss gerade ein Programm in Prolog schreiben. Dabei hänge ich gerade an folgendem Problem. Ich muss zwei Elemente aus einer Liste vertauschen können. Habe aber keine Ideen diesbezüglich, kann mir jemand weiterhelfen?

    Vielen Dank...

  • Hallo,
    das hier ist die (eine) Lösung:

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