module Queue:FIFO キューsig..end
このモジュールでは破壊的変更のできるキューを実装します。
type 'a t
'a 型の要素を格納するキューの型。exception Empty
val create : unit -> 'a tval add : 'a -> 'a t -> unitadd x q はキュー q の末尾に要素 x を追加します。val push : 'a -> 'a t -> unitadd と同義です。val take : 'a t -> 'atake q はキュー q から最初の要素を取り除いてその要素を返します。
キューが空のときは Empty 例外が発生します。val pop : 'a t -> 'atake と同義です。val peek : 'a t -> 'apeek q はキュー q の先頭の要素を返します。要素自体はキューから取り除きません。
キューが空のときは Empty 例外が発生します。val top : 'a t -> 'apeek と同義です。val clear : 'a t -> unitval copy : 'a t -> 'a tval is_empty : 'a t -> booltrue を返し、そうでなければ false を返します。val length : 'a t -> intval iter : ('a -> unit) -> 'a t -> unititer f q は q の要素に、最初から追加されたものから最近追加されたものへ、順に f を適用します。
キュー自体は変更されません。val fold : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'afold f accu q は List.fold_left f accu l と等価です。
ここで、 l は q の要素のリストです。
キュー自体は変更されません。val transfer : 'a t -> 'a t -> unittransfer q1 q2 は q1 の要素をすべてキュー q2 の末尾に追加し、 q1 を clear します。
これは iter (fun x -> add x qs); clear q1 と等価ですが定数時間で実行されます。