Skip to content

Instantly share code, notes, and snippets.

@avdi
Last active December 20, 2015 08:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save avdi/6099628 to your computer and use it in GitHub Desktop.
Save avdi/6099628 to your computer and use it in GitHub Desktop.
def next_state
(board, x, y) ->
cell = cell_at(board, x, y)
live_count = live_neighbors(board, x, y)
next_state(cell, live_count)
end
("o", live_count) when live_count in 2..3 -> "o"
("o", _) -> "."
(".", live_count) when live_count === 3 -> "o"
(".", _) -> "."
(_, x, y) when (x < 0 or y < 0) -> "."
def just_one_arity(x,y) -> IO.puts "hello"
# This would internally define both next_state/3 and next_state/2
# Since these are distinctions that the user largely doesn't care about
# Thoughts on referencing functions:
# The syntax here is intentionally an ugly placeholder because it's not important
# This is more about the semantics
$next_state$ # returns an anonymous lambda which dyn-dispatches to all arities, because DWIM
$next_state/2$ # returns a reference to the specific arity definition of next_state
$just_one_arity$ # returns just_one_arity/1 since it's unambiguous
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment