1 / 10

Implementace kone čného automatu v Prologu

Implementace kone čného automatu v Prologu. 1. Popis struktury automatu. Tato část popisuje strukturu konkrétního automatu a bude se lišit pro každý automat. Definice přechodové funkce: delta (stav1, vstup, stav2)

Download Presentation

Implementace kone čného automatu v Prologu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Implementace konečného automatu v Prologu 1. Popis struktury automatu Tato část popisuje strukturu konkrétního automatu a bude se lišit pro každý automat. • Definice přechodové funkce: delta(stav1, vstup, stav2) Pokud ze stavu stav1 vede přechod do stavu stav2 při vstupním symbolu vstup. Tímto způsobem nadefinujeme všechny přechody. • Definice koncových stavů koncovy(stav)

  2. Implementace konečného automatu v Prologu 2. Specifikace práce automatu Nadefinujeme, jak pracuje konečný automat. Tato část bude pro všechny automaty stejná. Základem bude predikát prijme(Stav, Seznam), který bude odpovídat YES/NO na otázku, zdali automat přijme vstupní řetězec, který je reprezentován seznamem Seznam. Stav je počáteční stav, ze kterého automat startuje. Použijeme rekurzivní definici.

  3. Implementace konečného automatu v Prologu 2. Specifikace práce automatu prijme(Stav, []) :- koncovy(Stav). % Prázdný vstupní řetězec je přijat, pokud je automat v koncovem stavu prijme(Stav1, [X|Zbytek]) :- delta(Stav1,X, Stav2), prijme(Stav2,Zbytek). % Řetězec skládající se z prvního symbolu X a zbytku je přijat automatem nacházejícím se ve stavu Q1 právě tehdy, když 1. existuje přechod ze stavu Q1 při tomto vstupním symbolu, 2. je přijat i zbytek řetězce.

  4. Implementace konečného automatu v Prologu 3. Použití automatu Prolog nám díky možnostem svého vyhodnocování poskytuje několik možností práce s automatem: 1. Dotaz, jestli automat přijme zadaný řetězec z počátečního stavu, např.: ?- prijme(poc_stav, [1,0,1,1,1]). Prolog odpoví YES/NO 2. Dotaz, z kterých stavů lze přijmout zadaný řetězec: ?- prijme(Stav, [1,0,1,1,1]). Prolog vypíše všechny takové stavy. 3. Dotaz, které řetězce lze ze zadaného stavu přijmout, tedy např. ?- prijme(poc_stav, Vstup). vypíše všechny řetězce, které automat přijímá.

  5. Implementace konečného automatu v Prologu 3. Automaty s výstupem • Automat Mealyho typu (tj. s výstupem při přechodu) jednoduše zrealizujeme úpravou přechodové funkce: delta(stav1, vstup, stav2):- write(‘Vystup BLA BLA’). • Moorův automat provádí výstup ve stavech, je tedy třeba definovat tuto výstupní funkci pro každý stav vystup(stav1) :- write(‘Vystup BLA BLA’). vystup(stav2) :- write(‘Vystup2 BLA BLA’). ... a zajistit její zavolání při navštívení stavu úpravou chování automatu: Výstup umístíme na první místo do prvního pravidla, které se nalezne při požadavku na přijetí řetězce, čímž zajistíme, že se vždy provede výstup, jakmile se dostaneme do příslušného stavu, tedy prijme(Stav, []) :- vystup(Stav), koncovy(Stav).

  6. Implementace konečného automatu v Prologu Příklad: automat na kávu – zadání Jako příklad si uvedeme automat na kávu, který přijímá mince 1 Kč, 2 Kč, 5 Kč a káva stojí 5 Kč. Výstupem automatu je množství vrácených peněz. Automat si nadefinujeme tabulkou (pro lepší pochopení funkce doporučujeme si automat překreslit graficky). Počáteční stav je označen šipkou a koncový stav je tučný.

  7. Implementace konečného automatu v Prologu Příklad: automat na kávu – tabulka přechodů

  8. Implementace konečného automatu v Prologu Příklad: automat na kávu– tabulka přechodů

  9. Implementace konečného automatu v Prologu Příklad: automat na kávu – program v Prologu delta(q0,1,q1). delta(q0,2,q2). delta(q0,5,q5) :- write('Davam kavu, vracim 0 Kc.'). delta(q1,1,q2). delta(q1,2,q3). delta(q1,5,q5) :- write('Davam kavu, vracim 1 Kc.'). delta(q2,1,q3). delta(q2,2,q4). delta(q2,5,q5) :- write('Davam kavu, vracim 2 Kc.'). delta(q3,1,q4). delta(q3,2,q5) :- write('Davam kavu, vracim 0 Kc.'). delta(q3,5,q5) :- write('Davam kavu, vracim 3 Kc.'). delta(q4,1,q5) :- write('Davam kavu, vracim 0 Kc.'). delta(q4,2,q5) :- write('Davam kavu, vracim 1 Kc.'). delta(q4,5,q5) :- write('Davam kavu, vracim 4 Kc.'). koncovy(q5). prijme(Stav, []) :- koncovy(Stav). prijme(Stav1, [X|Zbytek]) :- delta(Stav1,X, Stav2), prijme(Stav2,Zbytek).

  10. Implementace konečného automatu v Prologu Příklad: automat na kávu – další možnosti • U konkrétních automatů je možné program rozšířit o další vhodnou funkcionalitu, např. u automatu na kávu bychom mohli ošetřovat situace, kdy je vhozena nedovolená mince, upozornit, že mince nestačily na vydání kávy a vypsat finanční rozdíl, atd...

More Related