RosettaCodeData/Task/Priority-queue/Erlang/priority-queue.erl

29 lines
906 B
Erlang
Raw Permalink Normal View History

2013-10-27 22:24:23 +00:00
-module( priority_queue ).
-export( [create/0, insert/3, peek/1, task/0, top/1] ).
create() -> gb_trees:empty().
insert( Element, Priority, Queue ) -> gb_trees:enter( Priority, Element, Queue ).
peek( Queue ) ->
2014-01-17 05:32:22 +00:00
{_Priority, Element, _New_queue} = gb_trees:take_smallest( Queue ),
Element.
2013-10-27 22:24:23 +00:00
task() ->
2014-01-17 05:32:22 +00:00
Items = [{3, "Clear drains"}, {4, "Feed cat"}, {5, "Make tea"}, {1, "Solve RC tasks"}, {2, "Tax return"}],
Queue = lists:foldl( fun({Priority, Element}, Acc) -> insert( Element, Priority, Acc ) end, create(), Items ),
io:fwrite( "peek priority: ~p~n", [peek( Queue )] ),
lists:foldl( fun(_N, Q) -> write_top( Q ) end, Queue, lists:seq(1, erlang:length(Items)) ).
2013-10-27 22:24:23 +00:00
top( Queue ) ->
2014-01-17 05:32:22 +00:00
{_Priority, Element, New_queue} = gb_trees:take_smallest( Queue ),
{Element, New_queue}.
2013-10-27 22:24:23 +00:00
write_top( Q ) ->
2014-01-17 05:32:22 +00:00
{Element, New_queue} = top( Q ),
io:fwrite( "top priority: ~p~n", [Element] ),
New_queue.