Hallo! Kann mir jemand das Programm genau erklären ? Ich hab da leichte Probleme,
unten mit den Bewegungen ist mir klar , aber oben habe ich Problem.
%Startpostition
start(Eingabe,Ausgabe,Startzustand,Pfad) :- [M|RBand] = Eingabe, solve(Startzustand,[],M,RBand,LiEnde,MEnde,ReEnde,Pfad),
append(LiEnde,[MEnde],Z), append(Z,ReEnde,Ausgabe).
solve(Startzustand,LBand,M,RBand,LiEnde,MEnde,ReEnde,Pfad) :-
open(Pfad,read,Str),
read_file(Str,Inhalt),close(Str),!,
turing(Startzustand,LBand,M,RBand,LiEnde,MEnde,ReEnde,Inhalt).
turing(AktZustand,LBand,M,RBand,LiEnde,MEnde,ReEnde,Inhalt) :- %Basisfall
finde(AktZustand,M,Inhalt,NZeichen,ROL,'ende'),bewegung(LBand,NZeichen,RBand,ROL,LiEnde,MEnde,ReEnde).
turing(AktZustand,LBand,M,RBand,LiEnde,MEnde2,ReEnde,Inhalt) :-
finde(AktZustand,M,Inhalt,NZeichen,ROL,ZustandN),
bewegung(LBand,NZeichen,RBand,ROL,LNeu,MEnde,RNeu),
turing(ZustandN,LNeu,MEnde,RNeu,LiEnde,MEnde2,ReEnde,Inhalt).
read_file(Stream,[]) :-
at_end_of_stream(Stream).
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
read_file(Stream,L).
finde(Zustand,Zeichen,Lines,NZeichen,ROL,ZustandN) :- member(Z,Lines),(Zustand,Zeichen,NZeichen,ROL,ZustandN)=Z.
bewegung(Links,Mitte,Rechts,ROL,LNeu,MNeu,RNeu) :- ROL= 'r', append(Links,[Mitte],LNeu),Rechts=[H|T], RNeu=T,MNeu=H.
bewegung(Links,Mitte,Rechts,ROL,LNeu,MNeu,RNeu) :- ROL= 'r', append(Links,[Mitte],LNeu),Rechts=[],MNeu=' ',RNeu=[].
bewegung(Links,Mitte,Rechts,ROL,LNeu,MNeu,RNeu) :- ROL= 'l', append([Mitte],Rechts,RNeu), reverse(Links,X), X=[H|T],
reverse(T,NeuVariable),LNeu=NeuVariable, MNeu=H.
bewegung(Links,Mitte,Rechts,ROL,LNeu,MNeu,RNeu) :- ROL= 'l', append([Mitte],Rechts,RNeu), Links=[], MNeu=' ',LNeu=[].