Doker
7/1/2007 1:32:00 PM
Dzieki za pomoc:
Oto efekt mojej pracy:
Maszyna Turinga :) i program sprawdzajacy czy slowo jest palindromem.
przykladowe u?ycie:
t([o,b,a,b,b,a,b,o],2,q0,X).
kod:
pr(o,q0,q6,o,0).
pr(o,q1,q3,o,-1).
pr(o,q2,q4,o,-1).
pr(o,q3,q6,o,0).
pr(o,q4,q6,o,0).
pr(o,q5,q0,o,1).
pr(a,q0,q1,o,1).
pr(a,q1,q1,a,1).
pr(a,q2,q2,a,1).
pr(a,q3,q5,o,-1).
pr(a,q4,q7,o,0).
pr(a,q5,q5,a,-1).
pr(b,q0,q2,o,1).
pr(b,q1,q1,b,1).
pr(b,q2,q2,b,1).
pr(b,q3,q7,o,0).
pr(b,q4,q5,o,-1).
pr(b,q5,q5,b,-1).
pr(koncowe,[q6,q7]).
zastap([_|T],1,[Sym|T],Sym).
zastap([H|T],N,[H|Tn],Sym) :- Nm is N - 1, zastap(T,Nm,Tn,Sym).
ustaw(X,X).
t([H|T],Poz,Q,Odp) :- nth1(Poz,[H|T],Sym),
pr(koncowe,SKonc),
( memberchk(Q,SKonc) -> ustaw(Q,Odp);
( pr(Sym,Q,NQ,NSym,DeltaPoz),
NPoz is Poz + DeltaPoz,
print([Poz,NPoz,Q,NQ,Sym]),print([H|T]),
zastap([H|T],Poz,[Hn|Tn],NSym), writeln([Hn|Tn]),
t([Hn|Tn],NPoz,NQ,Odp)) ).