user520621
user520621

Reputation:

Erlang runtime error

I'm working on an erlang program and getting a strange runtime error. Any idea why? Thanks!

The errors are (after compiling the program successfully):

   8> PID = spawn(planner,start,[]).
   ** exception error: no match of right hand side value <0.65.0>
   9> 

This is the program:

-module(planner).
-export([start/0]).

start() ->
    loop([],[]).

loop(ContactsList,EventsList) ->
receive

    {contact, Last, First, Number} ->
        loop([{Last,First,Number}|ContactsList],EventsList);

    {event, Date, Time, What} -> 
        loop([{Date,Time,What}|ContactsList],EventsList);

    print_contacts ->
        NewList=lists:sort(ContactsList),
        lists:foreach(fun(Elem)->io:format("~p~n", [Elem]) end, NewList),
        loop(ContactsList,EventsList);

    print_events ->
        NewList=lists:sort(EventsList),
        lists:foreach(fun(Elem)->io:format("~p~n", [Elem]) end, NewList),
        loop(ContactsList,EventsList);

    exit ->
        io:format("Exiting.~n");

    _ -> 
        io:format("Dude, I don't even know what you're talking about.~n"),
        loop(ContactsList,EventsList)
end.

Upvotes: 0

Views: 450

Answers (1)

ndim
ndim

Reputation: 37875

The variable PID is probably set to something else but <0.65.0> from an earlier line you entered in the shell:

5> PID = spawn(...).
<0.42.0>
8> PID = spawn(...).
** exception error: no match of right hand side value <0.65.0>

This effectively makes the line which generates the error something like

8> <0.42.0> = <0.65.0>.

which will result in a "no match" error.

More obvious illustration of the issue:

1> X = 1.
1
2> X = 2.
** exception error: no match of right hand side value 2

As to solving your issue: You probably want to run f(PID) to have the shell forget just the PID variable, or even f() to have the shell forget ALL variables.

Upvotes: 7

Related Questions