Когда я изучаю Erlang, я пытаюсь решить ex.4.1 («Echo server») из книги «Erlang Programming» (автор O'Reilly), и у меня проблема.Мой код выглядит так:
-module(echo).
-export([start/0, print/1, stop/0, loop/0]).
start() ->
register(echo, spawn(?MODULE, loop, [])),
io:format("Server is ready.~n").
loop() ->
receive
{print, Msg} ->
io:format("You sent a message: ~w.~n", [Msg]),
start();
stop ->
io:format("Server is off.~n");
_ ->
io:format("Unidentified command.~n"),
loop()
end.
print(Msg) -> ?MODULE ! {print, Msg}.
stop() -> ?MODULE ! stop.
К сожалению, у меня есть некоторые проблемы.Включение работает должным образом, запускает новый процесс и отображает сообщение «Сервер готов».Но когда я пытаюсь использовать функцию печати (например, echo:print("Some message.").
), я получаю результат, но он не работает так, как хотелось бы.Он печатает мое сообщение в виде списка (не в виде строки) и генерирует сообщение об ошибке
=ERROR REPORT==== 18-Jul-2010::01:06:27 ===
Error in process <0.89.0> with exit value: {badarg,[{erlang,register,[echo,<0.93.0>]},{echo,start,0}]}
.Более того, когда я пытаюсь остановить сервер на echo:stop()
, я получаю еще одну ошибку
** exception error: bad argument
in function echo:stop/0
Может кто-нибудь объяснить мне, что здесь происходит?Я новичок в Erlang, и мне кажется, что мне сейчас трудно это понять.