Last active
December 13, 2023 12:27
-
-
Save tjweir/d9b720ee0234ab6af0f5 to your computer and use it in GitHub Desktop.
Universal server from Joe Armstrong, can I make it turn back into a universal server after?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -module(fav1). | |
| -export([test/0]). | |
| test() -> | |
| Pid = spawn(fun universal_server/0), | |
| Pid ! {become, fun fac_server/0}, | |
| Pid ! {self(), 50}, | |
| receive | |
| Y -> Y | |
| end, | |
| Pid2 = spawn(fun universal_server/0), | |
| Pid2 ! {become, fun fib_server/0}, | |
| Pid2 ! {self(), 50}, | |
| receive | |
| X -> X | |
| end, | |
| {X, Y}. | |
| universal_server() -> | |
| receive | |
| {become, F} -> F() | |
| end. | |
| fac_server() -> | |
| receive | |
| {From, N} -> | |
| From ! factorial(N), | |
| fac_server() | |
| end. | |
| factorial(0) -> 1; | |
| factorial(N) -> N * factorial(N-1). | |
| fib_server() -> | |
| receive | |
| {From, N} -> | |
| From ! fib(N), | |
| fib_server() | |
| end. | |
| fib(0) -> 0; | |
| fib(1) -> 1; | |
| fib(N) -> N + fib(N-1). | |
| %% in repl: | |
| %% > c(fav1). | |
| %% > fav1:test(). | |
| %% {30414093201713378043612608166064768844377641568960512000000000000, 1275} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment