2021年01月19日
『プログラミングElixir(第2版)』にひととおり目を通した。まだよくわからないことだらけなので実際に何か書いてみたい。写経とかせずに読んだけど、サンプルで載ってるコードもけっこう面白そうだったのでとりあえずそれを書いてみて雰囲気を掴むのがいいかもしれない。
とてつもなく簡単な例だけど、プロセスを使った並行処理を、プロセスの生成->メッセージを待ち受け->値の統合という形で書いてみた。 当たり前かもしれないけどちゃんとAtCoderでも動くんだなあ、感動した。
defmodule Main do
def main do
IO.read(:line)
|> String.trim()
|> solve()
|> IO.puts()
end
def solve(s) do
me = self()
String.codepoints(s)
|> Enum.map(fn n ->
spawn fn -> (send me, { :ok, String.to_integer(n) }) end
end)
|> Enum.map(fn _ ->
receive do {:ok, res} -> res end
end)
|> Enum.sum()
end
end