え~・・・と思いつつ、放置↔queue検索を繰り返していたら、queueモジュールがあることがわかった。
基本操作だけやってみた。
■queue:new()->queue ------------------------------------------
空のキューを作成する。Erlang R14B01 (erts-5.8.2) [smp:2:2] [rq:2] [async-threads:0]
Eshell V5.8.2 (abort with ^G)
1> Q = queue:new().
{[],[]}
■queue:in(term,queue)->queue ------------------------------------------
第1引数:キューに入れるもの
第2引数:操作対象のキュー
戻り:操作後のキュー
{[3],[]}
・・・
5> Q4 = queue:in(6,Q3).
{[6,5,4],[3]}
■queue:out(queue)->{{value, term}, queue} | {empty, queue}------------------------------------------
第1引数:対象のキュー
戻り:キュー内の先頭の値 もしくは 空({empty, queue})
6> queue:out(Q4).
{{value,3},{[6,5],[4]}}
■queue:in_r(term,queue) -> queue ------------------------------------------
第1引数:キューの先頭に入れるデータ
第2引数:操作対象のキュー
戻り:操作後のキュー
キューの先頭に値を入れる。
9> Q5 = queue:in_r(7,Q4).
{[6,5,4],[7,3]}
■queue:out(queue)->queue ------------------------------------------
第1引数:操作対象のキュー
戻り:操作後のキュー
10> queue:out(Q5).
{{value,7},{[6,5,4],[3]}}
■queue:out_r(queue)->queue ------------------------------------------
第1引数:操作対象のキュー
戻り:操作後のキュー
キューの1番最後から値をとる。
11> queue:out_r(Q5).
{{value,6},{[5,4],[7,3]}}
■queue:from_list(list)->queue ------------------------------------------
第1引数:リスト
戻り:キュー
リストからキューを作る。
リストからキューを作る。
15> queue:from_list([1,2,3,4,5]).
{[5,4,3],[1,2]}
■queue:to_list(queue) ->list ------------------------------------------
第1引数:キュー
戻り:リスト
16> queue:to_list(Q5).
[7,3,4,5,6]
■queue:reverse(queue)->queue ------------------------------------------
第1引数:キュー
戻り:キュー
17> queue:reverse(Q5).
{[7,3],[6,5,4]}
■queue:split(Integer,queue)->{queue,queue} ------------------------------------------
第1引数:整数
第2引数:キュー
戻り:キューのタプル
20> {Q6,Q7} = queue:split(2,Q5).
{{[3],[7]},{[6,5],[4]}}
21> Q6.
{[3],[7]}
22> Q7.
{[6,5],[4]}
■queue:join(queue,queue)->queue ------------------------------------------
第1引数:キュー
第2引数:キュー
戻り:キュー
23> queue:join(Q6,Q7).
{[6,5],[7,3,4]}
■queue:filter(fun,queue)->queue ------------------------------------------
第1引数:関数
第2引数:キュー
戻り:キュー
9> Q5 = queue:in_r(7,Q4).
{[6,5,4],[7,3]}
24> Fun1 = fun(X) -> true end.
#Fun<erl_eval.6.13229925>
25> queue:filter(Fun1,Q5).
{[6,5,4],[7,3]}
26> Fun2 = fun(X) -> false end.
#Fun<erl_eval.6.13229925>
27> queue:filter(Fun2,Q5).
{[],[]}
28> Fun3 = fun(X) -> if X rem 2 == 0 -> true;
28> true -> false end
28> end.
#Fun<erl_eval.6.13229925>
29> queue:filter(Fun3,Q5).
{[6],[4]}
30> Q5.
{[6,5,4],[7,3]}
■queue:member(term,queue)->boolean ------------------------------------------
第1引数:データ
第2引数:キュー
戻り:真偽
9> Q5 = queue:in_r(7,Q4).
{[6,5,4],[7,3]}
31> queue:member(3,Q5).true
32> queue:member(10,Q5).
false