LFE Friday - queue:peek/1
This week's LFE Friday was translated with permission from the Erlang Thursday series by Steven Proctor. This week's translator: Robert Virding.
For today's LFE Friday we continue looking at the queue
module and look at queue:peek/1 from the Extended API.
queue:peek/1
takes a queue as it's argument and returns either the atom empty
if the queue is empty, or #(value item)
where item
is the item at the head of the queue.
> (set queue-one (queue:from_list '(1 2 3 4 5)))
#((5 4) (1 2 3))
> (queue:peek queue-one)
#(value 1)
> (set empty-queue (queue:new))
#(() ())
> (queue:peek empty-queue)
empty
queue:peek/1
does not modify the existing queue at all either, so we can call it once as seen above, or multiple times as below, and the queue we peeked at doesn't change.
> (set queue-two (queue:from_list '(a b c d e f)))
#((f e) (a b c d))
> (queue:peek queue-two)
#(value a)
> (queue:peek queue-two)
#(value a)
> (queue:peek queue-two)
#(value a)
> queue-two
#((f e) (a b c d))
And unlike we saw in the previous LFE Friday on queue:head/1, we can safely peek at an empty queue instead of getting an exception.
> (queue:head empty-queue)
exception error: empty
in (: queue head #(() ()))
> (queue:peek empty-queue)
empty
Erlang's queue
module also contains queue:peek_r/1 which will peek at the element at the rear of the queue.
> (queue:peek_r empty-queue)
empty
> (queue:peek_r queue-one)
#(value 5)
> (queue:peek_r queue-one)
#(value 5)
> (queue:peek_r queue-one)
#(value 5)
> (queue:peek_r queue-two)
#(value f)
> queue-two
#((f e) (a b c d))
> queue-one
#((5 4) (1 2 3))
> empty-queue
#(() ())
-Proctor, Robert