- Up - | Next >> |
The module QueueLib.ozf
Module/ provides queues in library style. A precompiled version of QueueLib.ozf
is available on-line at Functors/Version.3.2/QueueLib.ozf
functor
export
new : NewQueue
fromList: ListToQueue
Get Put Top Size IsEmpty Clear ToList Enq Deq
define
fun {NewQueue} L in {NewCell 0#L#L} end
fun {ListToQueue L1} L2 in {NewCell {Length L1}#{Append L1 L2}#L2} end
proc {Put Q X}
Old New
in
{Exchange Q Old New}
case Old
of N#H#T then T2 in T=X|T2 New=N+1#H#T2 end
end
Enq = Put
fun {Get Q}
Old New
in
{Exchange Q Old New}
case Old
of 0#_#_ then New=Old raise empty end
[] N#(X|H)#T then New=N-1#H#T X end
end
Deq = Get
fun {Top Q}
case {Access Q}
of 0#_#_ then raise empty end
[] _#(X|_)#_ then X end
end
fun {Size Q} {Access Q}.1 end
fun {IsEmpty Q} {Access Q}.1==0 end
proc {Clear Q} L in {Assign Q 0#L#L} end
fun {ToList Q}
case {Access Q} of N#L#_ then
for
I in 1..N
X in L
collect:C
do
{C X}
end
end
end
end
- Up - | Next >> |