rendered paste bodyautomat(Automat, Stan0,Stos0,StanyKoncowe,Przejscia) :-
Automat=[Stan0,Stos0,StanyKoncowe,Przejscia].
migawka(Migawka, Stan,Stos,Dane) :-
Migawka=[Stan,Stos,Dane].
migawka(Automat, Dane, Migawka) :-
automat(Automat, Stan0, Stos0, _, _),
migawka(Migawka, Stan0,[Stos0],Dane).
przejdz(Przejscia, Migawka1, Migawka2) :-
Przejscia = [Przejscie|_],
Przejscie = [Stan1, StosP, DaneP, Stan2, StosQ],
Migawka1 = [Stan1, Stos1, Dane1],
append(StosP, Stos0, Stos1),
append(StosQ, Stos0, Stos2),
append(DaneP, Dane2, Dane1), !,
Migawka2 = [Stan2, Stos2, Dane2].
przejdz(Przejscia, Migawka1, Migawka2) :-
Przejscia = [_|Pozostale],
przejdz(Pozostale, Migawka1, Migawka2).
dzialaj(Automat, Migawka) :-
wypisuj(Migawka),
automat(Automat, _, _, _, Przejscia),
przejdz(Przejscia, Migawka, Kolejna), !,
dzialaj(Automat, Kolejna).
dzialaj(Automat, Migawka) :-
automat(Automat, _, _, StanyKoncowe, _),
migawka(Migawka, Stan, _, Dane),
Dane = [],
memberchk(Stan, StanyKoncowe).
uruchom(Automat, Dane) :-
migawka(Automat, Dane, Migawka),
dzialaj(Automat, Migawka).
wypisuj(Migawka) :-
migawka(Migawka, Stan, Stos, Dane),
string_to_list(String, Dane),
writef('Stan: <%t>', [Stan]),nl,
writef('Stos: %t', [Stos]),nl,
writef('Dane: "%t"', [String]), nl,nl.
test :-
automat(A, s, x,
[k],
[[s, [], "(", s, [n]],
[s, [n], ")", s, []],
[s, [x], "", k, []]]),
D="(()())",
uruchom(A, D).