Rešitev: Končni avtomat 3 (Mathematica)

Iz MaFiRaWiki

Naloga: Končni avtomat 3

 Clear[KA,d]
 KA = avtomat[{q0,q1,q2,q3}, {"a","b"}, q0, d, {q1,q2}];
 d[q0, "a"] = q1;
 d[q0, "b"] = q2;
 d[q1, "a"] = q3;
 d[q1, "b"] = q2;
 d[q2, "a"] = q1;
 d[q2, "b"] = q3;
 d[q3, "a"] = q3;
 d[q3, "b"] = q3;

Preverimo delovanje končnega avtomata:

Clear[stanja, abeceda, zacetnoStanje, prehodnaFunkcija, koncnaStanja]
stanja[a_avtomat] := a[[1]];
abeceda[a_avtomat] := a[[2]];
zacetnoStanje[a_avtomat] := a[[3]];
prehodnaFunkcija[a_avtomat] := a[[4]];
koncnaStanja[a_avtomat] := a[[5]];

Clear[razpoznava]
razpoznava[a_avtomat,qt_,""]:=MemberQ[koncnaStanja[a],qt];
razpoznava[a_avtomat,qt_,w_]:=razpoznava[a, prehodnaFunkcija[a][qt,StringTake[w,1]], StringDrop[w,1]];
razpoznava[a_avtomat,w_]:=razpoznava[a,zacetnoStanje[a],w];
razpoznava::usage="Funkcija razpoznava[a,q,b] vrne True, če končni avtomat a, ki je v stanju q, razpozna besedo b in False sicer.";

Glej tudi

Osebna orodja