All pastes #2022996 Raw Edit

Mine

public text v1 · immutable
#2022996 ·published 2010-12-18 18:47 UTC
rendered paste body
automat(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).