Today’s Erlang Thursday is on queue:split/2 from the queue
modules Original API.
queue:split/2
takes two arguments. The first argument being a integer N from 0 to X, where X is number of items in the queue, and the second argument is the queue that we wish to split. The return value is a two-tuple with a the first item being a queue of the first N items, and the second item in the tuple is a queue of the rest of the items.
QueueOne = queue:from_list([a, 1, b, 2, c, 3, 4]). % {[4,3,c],[a,1,b,2]} queue:split(4, QueueOne). % {{[2],[a,1,b]},{[4,3],[c][/c]}} queue:split(0, QueueOne). % {{[],[]},{[4,3,c],[a,1,b,2]}} queue:split(1, QueueOne). % {{[],[a]},{[4,3,c],[1,b,2]}} queue:split(7, QueueOne). % {{[4,3,c],[a,1,b,2]},{[],[]}} queue:split(15, QueueOne). % ** exception error: bad argument % in function queue:split/2 % called as queue:split(15,{[4,3,c],[a,1,b,2]}) {SplitFirst, SplitSecond} = queue:split(3, QueueOne). % {{[b,1],[a]},{[4,3,c],[2]}} SplitFirst. % {[b,1],[a]} SplitSecond. % {[4,3,c],[2]} queue:peek(SplitFirst). % {value,a} queue:peek(SplitSecond). % {value,2}
Erlang also provides a queue:join/2 function that takes two queues, and returns a new queue, with the queue that was passed as the second argument appended to the queue passed in as the first argument.
queue:join(SplitFirst, SplitSecond). % {[4,3,c],[a,1,b,2]} queue:join(SplitSecond, SplitFirst). % {[b,1],[2,c,3,4,a]} queue:join(queue:new(), SplitFirst). % {[b,1],[a]} queue:join(queue:new(), queue:new()). % {[],[]}
–Proctor