Finite state machine: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) (Added 11l) |
|||
Line 32: | Line 32: | ||
*[https://www.youtube.com/watch?v=vhiiia1_hC4 Computers Without Memory (Finite State Automata)], A Computerphile Video. |
*[https://www.youtube.com/watch?v=vhiiia1_hC4 Computers Without Memory (Finite State Automata)], A Computerphile Video. |
||
<br/><br/> |
<br/><br/> |
||
=={{header|11l}}== |
|||
{{trans|Python}} |
|||
<lang 11l>V states = [‘ready’ = |
|||
(‘Machine ready: (d)eposit, or (q)uit?’, |
|||
[String(‘d’), ‘q’]), |
|||
‘waiting’ = |
|||
(‘Machine waiting: (s)elect, or (r)efund?’, |
|||
[String(‘s’), ‘r’]), |
|||
‘dispense’ = |
|||
(‘Machine dispensing: please (r)emove product’, |
|||
[String(‘r’)]), |
|||
‘refunding’ = |
|||
(‘Refunding money’, |
|||
[String]()) |
|||
] |
|||
V transitions = [‘ready’ = |
|||
[String(‘d’) = ‘waiting’, |
|||
String(‘q’) = ‘exit’], |
|||
‘waiting’ = |
|||
[String(‘s’) = ‘dispense’, |
|||
String(‘r’) = ‘refunding’], |
|||
‘dispense’ = |
|||
[String(‘r’) = ‘ready’], |
|||
‘refunding’ = |
|||
[‘’ = ‘ready’]] |
|||
F Acceptor(prompt, valids) |
|||
I valids.empty |
|||
print(prompt) |
|||
R ‘’ |
|||
E |
|||
L |
|||
V resp = input(prompt)[0].lowercase() |
|||
I resp C valids |
|||
R String(resp) |
|||
F finite_state_machine(initial_state, exit_state) |
|||
V next_state = initial_state |
|||
V current_state = :states[next_state] |
|||
L |
|||
V response = Acceptor(current_state[0], current_state[1]) |
|||
I response == exit_state |
|||
L.break |
|||
next_state = :transitions[next_state][response] |
|||
current_state = :states[next_state] |
|||
finite_state_machine(‘ready’, ‘q’)</lang> |
|||
{{out}} |
|||
<pre> |
|||
Machine ready: (d)eposit, or (q)uit?d |
|||
Machine waiting: (s)elect, or (r)efund?s |
|||
Machine dispensing: please (r)emove productr |
|||
Machine ready: (d)eposit, or (q)uit?d |
|||
Machine waiting: (s)elect, or (r)efund?r |
|||
Refunding money |
|||
Machine ready: (d)eposit, or (q)uit?q |
|||
</pre> |
|||
=={{header|BASIC}}== |
=={{header|BASIC}}== |