kana-sama / tiny-erlang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

# run
hpack; cabal run

Example (look example.erl):

print_server(Prefix) ->
  receive
    {print, Message} ->
      print(Prefix, ": ", Message),
      print_server(Prefix);
    {stop, Pid} ->
      Pid ! {stoped, self()}
  end.

wait(N) -> receive after N -> ok end.

% swap between A and B
swap(A, B, A) -> B;
swap(A, B, B) -> A.

balancer(S1, S2, M) -> balancer(S1, S2, M, S1).
balancer(S1, S2, [H|T], S) ->
  S ! {print, H},
  wait(500),
  balancer(S1, S2, T, swap(S1, S2, S));
balancer(_, _, [], _) -> ok.

start() ->
  S1 = spawn(main, print_server, ["server 1"]),
  S2 = spawn(main, print_server, ["server 2"]),
  balancer(S1, S2, [hello, world, kana, other, message, 42]),
  S1 ! {stop, self()}, receive {stoped, S1} -> ok end,
  S2 ! {stop, self()}, receive {stoped, S2} -> ok end,
  print("done").


% Output:
% server 1: hello
% server 2: world
% server 1: kana
% server 2: other
% server 1: message
% server 2: 42
% done

About


Languages

Language:Haskell 89.0%Language:Lex 6.7%Language:Erlang 4.1%Language:Shell 0.2%