Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Функциональные языки: общие вопросы > Работа с процессами


Автор: iiukyr4uk 25.4.2013, 19:05
Ребятки, помоги кто нить!!!

Надо создать процесс-"эхо", который ожидает сообщения
1) если получен атом stop, то он заканчивает работу; 
2) если получено {print, Term}, то выводит Term

Работать должен примерно так:
> echo:start().
Started <0.33.0>
ok
> echo:print(1).
1
ok
> echo:print(stop).
stop
ok
> echo:stop().
Stopped!
ok

Автор: beroal 29.4.2013, 20:47
Укажите язык программирования. Почему вопрос именно в разделе языков функционального программирования?

В общем-то, get line, put line, ничего сложного быть не должно.

Автор: k0rvin 30.4.2013, 13:27
Цитата(beroal @  29.4.2013,  20:47 Найти цитируемый пост)
Укажите язык программирования. Почему вопрос именно в разделе языков функционального программирования?

Erlang же.
http://www.erlang.org/doc/getting_started/conc_prog.html

Автор: Бонифаций 1.5.2013, 21:00
Цитата(iiukyr4uk @ 26.4.2013,  02:05)
Ребятки, помоги кто нить!!!

Надо создать процесс-"эхо", который ожидает сообщения
1) если получен атом stop, то он заканчивает работу; 
2) если получено {print, Term}, то выводит Term

ну прям такая сложная задача!

Код

-module(echo).
-export([start/0,init/1, print/1,stop/0]).

start() ->
    spawn(echo, init, [self()]).

init(From) ->
    register(echo,self()),
    loop(From).

loop(From) ->
    receive
    stop        -> io:format("Stopped~n"), ok;
        {print,Msg} -> io:format("~p~n",[Msg]), loop(From);
    _ -> loop(From)
    end.

print(X) -> print(X, whereis(echo)).

print(_,undefined) -> {error, echo_is_not_started};
print(Msg,Pid)     -> Pid ! {print,Msg},ok.

stop() -> stop(whereis(echo)).

stop(undefined) -> {error, echo_is_not_started};
stop(Pid)       -> Pid ! stop, ok.



И все. Проверяем.

1> c("/home/walrus/echo", [{outdir, "/home/walrus/"}]).
{ok,echo}
2> echo:start().
<0.39.0>
3> echo:print(1).
1
ok
4> echo:print(stop).
stop
ok
5> echo:stop().
Stopped
ok
6> echo:stop().
{error,echo_is_not_started}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)