Skip to content

Instantly share code, notes, and snippets.

@svard
Created January 27, 2016 21:51
Show Gist options
  • Save svard/bb8ce5f1e554005ccebb to your computer and use it in GitHub Desktop.
Save svard/bb8ce5f1e554005ccebb to your computer and use it in GitHub Desktop.
defmodule UniversalServer do
def universal_server() do
receive do
{:become, f} ->
f.()
end
end
def factorial_server() do
receive do
{from, n} ->
send from, factorial(n)
factorial_server()
end
end
defp factorial(0) do
1
end
defp factorial(n) do
n * factorial(n-1)
end
def run(n) do
pid = spawn &universal_server/0
send pid, {:become, &factorial_server/0}
send pid, {self(), n}
receive do
x -> x
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment