Skip to content

Instantly share code, notes, and snippets.

@mndvns
Created August 31, 2016 18:27
Show Gist options
  • Save mndvns/80b00cf67d418e8359fb5566b80aeb4c to your computer and use it in GitHub Desktop.
Save mndvns/80b00cf67d418e8359fb5566b80aeb4c to your computer and use it in GitHub Desktop.
My favorite elixir program
# based on Joe Armstrong's blog post, 'My favorite erlang program'
# http://joearms.github.io/2013/11/21/My-favorite-erlang-program.html
defmodule Server do
def universal_server() do
receive do
{:become, f} ->
apply(f, [])
end
end
def factorial_server() do
receive do
{from, n} ->
send(from, factorial(n))
factorial_server()
end
end
def factorial(0), do: 1
def factorial(n), do: n * factorial(n - 1)
end
pid = spawn(&Server.universal_server/0)
send(pid, {:become, &Server.factorial_server/0})
send(pid, {self, 50})
receive do
x -> x
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment