Paste number 78493: erlang star exercise

Paste number 78493: erlang star exercise
Pasted by: shey
When:1 year, 3 months ago
Share:Tweet this! | http://paste.lisp.org/+1OKD
Channel:None
Paste contents:
Raw Source | XML | Display As
-module(star).
-export([main/3, vertex_node/0, center_node/4]).

%% Write a function which starts N processes in a star, 
%% and sends a message to each of them M times. 
%% After the messages have been sent the processes 
%% should terminate gracefully.

vertex_node() ->
  receive
    {stop, Center_PID} ->
      io:format("recieved ~w, from ~w, exiting~n", [stop, Center_PID]),
      exit(ok);
    {Something, Center_PID} ->
	io:format("recieved message: ~s, from ~w~n", [Something, Center_PID]),
		Center_PID ! {self(), ok},
		vertex_node()
  end.

center_node(_, _, 0, Original_Nodes ) -> 
  lists:map(fun(Vertex_Node) -> Vertex_Node ! {stop, self()} end, Original_Nodes);
  
center_node(Message, [], Count, Origingal_Nodes) ->
  center_node(Message, Origingal_Nodes, Count -1, Origingal_Nodes);
 
center_node(Message, Nodes, Count, Original_Node_List) ->
  [Vertex_Node | Remaining_Nodes] = Nodes,
  Vertex_Node ! {Message, self()},  
  receive
    {Pid, Msg} ->
      io:format("center received ack: ~w, from ~w~n", [Msg, Pid])
  end,
  center_node(Message, Remaining_Nodes, Count, Original_Node_List).
	
main(Processes, Messages, Message) ->
  Nodes = lists:map(fun(X) -> spawn(star, vertex_node, []) end, lists:seq(1, Processes)),
  spawn(star, center_node, [Message, Nodes, Messages, Nodes]).
	

This paste has no annotations.

Colorize as:
Show Line Numbers

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.