[erlang-questions] Beginner question

Joe Armstrong erlang@REDACTED
Wed Mar 16 05:22:30 CET 2016


Here's a tip

I *always* start writing message processing lops like this:

    loop(State) ->
         receive
               Any ->
                    io:format("***unexpected ~p~n",[Any]),
                    loop(State)
         end.

Then I compile and run this with my problem.

Of course, I'll get a printout
since the program is incomplete. I then let these printouts guide the
order in which I
write the program - I add a pattern for the first unmatched message,
recompile and run again.

When there are no more messages saying things are unmatched I remove the
last pattern (or just leave it in).

In a published program the last part is most often removed, it was necessary
during development but can be removed once you have a correct program.

What you see in published examples is the final result - during development
it's helpful to add print statements so you can see what's happeing and remove
them later.

I think if you'd done this you'd have immediately seen what was wrong.

Cheers

/Joe




On Tue, Mar 15, 2016 at 1:28 PM, Pietro <pulsarpietro@REDACTED> wrote:
> dmkolesnikov@REDACTED writes:
>
>> Hello,
>>
>> You are using atoms instead of variables in your program. Erlang
>> variables starts with capital letter.
>>
>> The receive loop cannot match your message:
>>
>>     {From, {insert, key, value}} ->
>>
>> It expects one triple of atoms but you send different one.
>>
>>     test:interact(Pid, {insert, testkey, testvalue}).
>>
>> Dmitry
>>
>> Sent from my iPhone
> Ouch ! Thank you very much, I knew I were missing something crucial
> here, would you help me in my next step ?
>
> loop(Table) ->
>     receive
>         {From, {insert, Key, Value}} ->
>             io:format("Here insert"),
>             Return = ets:insert(Table, {Key, Value}),
>             From ! Return,
>             loop(Table);
>         {From, {lookup, Key}} ->
>             io:format("Here lookup"),
>             Return = ets:lookup(Table, Key),
>             From ! Return,
>             loop(Table);
>         {From, Any} ->
>             From ! {self(), {error,Any}},
>             loop(Table)
>     end.
>
> This code results in :
>
> 1> c(test).
> {ok,test}
> 2> Pid = test:start().
> <0.40.0>
> 3> Pid ! {self(), {insert, a, 1}}.
> Here insert{<0.33.0>,{insert,a,1}}
> 4> Pid ! {self(), {lookup, a}}.
> Here lookup{<0.33.0>,{lookup,a}}
>
>
> It does not return the the stored values even though it clearly matches
> the patterns, where is the rub here ?
>
>
>>
>> On 15 Mar 2016, at 00:53, Pietro <pulsarpietro@REDACTED> wrote:
>>
>>     Hi all,
>>
>>     I have recently started to implement a small academic project in
>>     Erlang
>>     and I have bumped into a problem which seems to show to myself I
>>     haven't
>>     grasped something important about the technology itself.
>>
>>     That's my code :
>>
>>     -module(test).
>>     -export([start/0, interact/2]).
>>
>>
>>     start() ->
>>     spawn (fun() -> startloop() end).
>>
>>
>>     interact(Pid, Request) ->
>>     Pid ! {self(), Request},
>>     receive
>>     {Pid, Response} -> Response
>>     end.
>>
>>
>>     startloop() ->
>>     TableId = ets:new(dictionary, [set]),
>>     loop(TableId).
>>
>>     loop(Table) ->
>>     receive
>>     {From, {insert, key, value}} ->
>>     From ! ets:insert(Table, {key, value}),
>>     loop(Table);
>>     {From, {lookup, key}} ->
>>     From ! ets:lookup(Table, key),
>>     loop(Table);
>>     Any ->
>>     Any
>>
>>     end.
>>
>>
>>     The problem happens when I try to interact with the server I start
>>     using
>>     the command:
>>
>>     Pid = test:start().
>>
>>     Then I run :
>>
>>     test:interact(Pid, {insert, testkey, testvalue}).
>>
>>     My ershell at this point hangs and nothing happens ... what is
>>     happening
>>     ? Please feel free to redirect me to a more appropriate newsgroup
>>     if my
>>     question is not appropriate or if there is a better one.
>>
>>     Thanks in advance.
>>
>>     Pietro.
>>
>>     _______________________________________________
>>     erlang-questions mailing list
>>     erlang-questions@REDACTED
>>     http://erlang.org/mailman/listinfo/erlang-questions
>>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list