Elixir

[Elixir]キューを実装してみた

More than 1 year has passed since last update.

実装してみたってほどじゃないけど
ちょっとした練習を兼ねて書いてみた.

Queue.add job で jobを追加
Queue.pop で先頭のjobを取り出す
するものを書く.

書いてみた

queue.ex
defmodule Queue do
  @name __MODULE__

  def start_link, do: Agent.start_link(fn -> [] end, name: @name)
  def add(job), do: Agent.update(@name, fn queue -> queue ++ [job] end)
  def pop, do: Agent.get_and_update(@name, fn [head | tail] -> {head, tail})

end
iex(1)> QueueEx.Queue.start_link
{:ok, #PID<0.124.0>}
iex(2)> QueueEx.Queue.add 1
:ok
iex(3)> QueueEx.Queue.add 2
:ok
iex(4)> QueueEx.Queue.add 3
:ok
iex(5)> QueueEx.Queue.add 3
:ok
iex(6)> QueueEx.Queue.pop
1
iex(7)> QueueEx.Queue.pop
2
iex(8)> QueueEx.Queue.pop
3

次は優先度つきキューかスタックを実装してみる