Finite state machine: Difference between revisions

Content added Content deleted
(julia example)
(Added Prolog)
Line 1,224: Line 1,224:
Machine is READY. (D)eposit or (Q)uit :Q
Machine is READY. (D)eposit or (Q)uit :Q
Thank you, shutting down now.
Thank you, shutting down now.
</pre>

=={{header|Prolog}}==

<lang Prolog>state(ready, deposit, waiting).
state(ready, quit, exit).
state(waiting, select, dispense).
state(waiting, refund, refunding).
state(dispense, remove, ready).

message(ready, 'Please deposit coins.~n').
message(waiting, 'Please select an item, or refund coins.~n').
message(dispense, 'Please remove your item.~n').
message(refunding, 'Coins have been refunded~n').

act :- act(ready).

act(exit).
act(refunding) :-
print_message(refunding),
act(ready).
act(State) :-
dif(State, exit),
print_message(State),
read(Action),
state(State, Action, NextState),
act(NextState).
print_message(State) :- message(State, Message), format(Message).</lang>
{{out}}
<pre>
2 ?- act.
Please deposit coins.
|: deposit.
Please select an item, or refund coins.
|: select.
Please remove your item.
|: remove.
Please deposit coins.
|: deposit.
Please select an item, or refund coins.
|: refund.
Coins have been refunded
Please deposit coins.
|: quit.

true .
</pre>
</pre>