First commit

This commit is contained in:
Mariano Uvalle 2020-06-20 13:57:33 -05:00
commit 1dba0af064
36 changed files with 1065 additions and 0 deletions

46
chapter5/calculator.ex Normal file
View file

@ -0,0 +1,46 @@
defmodule Calculator do
def start do
spawn(fn -> loop(0) end)
end
defp loop(current_value) do
new_value =
receive do
{:value, caller} ->
send(caller, {:response, current_value})
current_value
{:add, value} ->
current_value + value
{:sub, value} ->
current_value - value
{:mul, value} ->
current_value * mul
{:div, value} ->
current_value / value
invalid_request ->
IO.puts("invalid request #{inspect(invalid_request)}")
current_value
end
loop(new_value)
end
def value(server_pid) do
send(server_pid, {:value, self()})
receive do
{:response, value} ->
value
end
end
def add(server_pid, value), do: send(server_pid, {:add, value})
def sub(server_pid, value), do: send(server_pid, {:sub, value})
def mul(server_pid, value), do: send(server_pid, {:mul, value})
def div(server_pid, value), do: send(server_pid, {:div, value})
end