Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%Пример для вопроса №8: Как запрограммировать на Erlang конечный автомат?
- %%"Дверь с кодовым замком"
- -module(code_lock).
- -behaviour(gen_fsm).
- -export([start_link/1]).
- -export([button/1]).
- -export([init/1, locked/2, open/2]).
- start_link(Code) ->
- gen_fsm:start_link({local, code_lock}, code_lock, Code, []).
- button(Digit) ->
- gen_fsm:send_event(code_lock, {button, Digit}).
- init(Code) ->
- {ok, locked, {[], Code}}.
- locked({button, Digit}, {SoFar, Code}) ->
- case [Digit|SoFar] of
- Code ->
- do_unlock(),
- {next_state, open, {[], Code}, 3000};
- Incomplete when length(Incomplete)<length(Code) ->
- {next_state, locked, {Incomplete, Code}};
- _Wrong ->
- {next_state, locked, {[], Code}}
- end.
- open(timeout, State) ->
- do_lock(),
- {next_state, locked, State}.
- do_lock() ->
- io::format("door closed").
- do_unlock() ->
- io::format("door opened").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement