Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,43 @@
|
|||
defmodule Standard_deviation do
|
||||
def add_sample( pid, n ), do: send( pid, {:add, n} )
|
||||
|
||||
def create, do: spawn_link( fn -> loop( [] ) end )
|
||||
|
||||
def destroy( pid ), do: send( pid, :stop )
|
||||
|
||||
def get( pid ) do
|
||||
send( pid, {:get, self()} )
|
||||
receive do
|
||||
{ :get, value, _pid } -> value
|
||||
end
|
||||
end
|
||||
|
||||
def task do
|
||||
pid = create()
|
||||
for x <- [2,4,4,4,5,5,7,9], do: add_print( pid, x, add_sample(pid, x) )
|
||||
destroy( pid )
|
||||
end
|
||||
|
||||
defp add_print( pid, n, _add ) do
|
||||
IO.puts "Standard deviation #{ get(pid) } when adding #{ n }"
|
||||
end
|
||||
|
||||
defp loop( ns ) do
|
||||
receive do
|
||||
{:add, n} -> loop( [n | ns] )
|
||||
{:get, pid} ->
|
||||
send( pid, {:get, loop_calculate( ns ), self()} )
|
||||
loop( ns )
|
||||
:stop -> :ok
|
||||
end
|
||||
end
|
||||
|
||||
defp loop_calculate( ns ) do
|
||||
average = loop_calculate_average( ns )
|
||||
:math.sqrt( loop_calculate_average( for x <- ns, do: :math.pow(x - average, 2) ) )
|
||||
end
|
||||
|
||||
defp loop_calculate_average( ns ), do: Enum.sum( ns ) / length( ns )
|
||||
end
|
||||
|
||||
Standard_deviation.task
|
||||
Loading…
Add table
Add a link
Reference in a new issue