First commit
This commit is contained in:
commit
1dba0af064
36 changed files with 1065 additions and 0 deletions
46
chapter5/calculator.ex
Normal file
46
chapter5/calculator.ex
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue