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

Iz MaFiRaWiki

Naloga: Končni avtomat 2

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

Preverimo delovanje končnega avtomata:

Clear[zacetnoStanje,prehodnaFunkcija,koncnaStanja]
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.";

In[2]:= Select[{"","a","b","aa","ba","ab","bb","aaa","baa","aba","bba","aab","bab","abb","bbb"},(razpoznava[KA,#]&)]
Out[2]:= {ab,aab,abb}

Glej tudi

Osebna orodja