Fw: Newbie question

kevin.hostelley <>
Tue Jul 21 18:45:05 CEST 2009


I'm new to erlang and I was trying to write a simple message queue to try
and learn the language.  I'm getting a result I don't understand.  Here's
the code for the program:

-module(queue).
-export([start/0, listen/1]).

listen([]) ->
    io:format("Listen with empty list.~n"),
    receive
        {get, Pid} ->
            Pid ! empty,
            listen([]);
        {put, Data} ->
            listen([Data]);
        stop ->
            io:format("Stopped.~n")
    end;

listen(Elements) ->
    io:format("Listen with current list (~s).~n", [Elements]),
    receive
        {get, Pid} ->
            [Elem|NewList] = Elements,
            Pid ! {data, Elem},
            listen(NewList);
        {put, Data} ->
            NewList2 = lists:append(Elements, [Data]),
            listen(NewList2);
        stop ->
            io:format("Stopping.~n")
    end.

start() ->
    register(queue, spawn(queue, listen,[[]])).


Then from the shell I run:

queue ! {put, "ABC"}.
queue ! {put, "DEF"}.
queue ! {put, "GHI"}.
queue ! {get, self()}.
receive
{data, Data} -> io:format("Got ~s~n", [Data]);
empty -> io:format("Got empty~n");
AnyMessage -> io:format("Trap ~s~n", [AnyMessage]);
_ -> io:format("Got something else~n")
after 5000 -> io:format("timed out~n")
end.

And I get "Got ABC".  I do another get and the same receive as above and I
get:

** exception exit: {badarg,[{io,format,[<0.31.0>,"Trap
~s~n",[{data,"DEF"}]]},
                            {erl_eval,do_apply,5},
                            {shell,exprs,6},
                            {shell,eval_exprs,6},
                            {shell,eval_loop,3}]}
     in function  io:o_request/3


I don't understand why the {data, Data} pattern isn't receiving the
message.  Can someone help me understand this?


Thanks,

Kevin Hostelley

***** PLEASE NOTE ***** This E-Mail/telefax message and any
documents accompanying this transmission may contain privileged
and/or confidential information and is intended solely for the
addressee(s) named above. If you are not the intended
addressee/recipient, you are hereby notified that any use of,
disclosure, copying, distribution, or reliance on the contents of
this E-Mail/telefax information is strictly prohibited and may
result in legal action against you. Please reply to the sender
advising of the error in transmission and immediately
delete/destroy the message and any accompanying documents. Thank
you.*****  


More information about the erlang-questions mailing list