[erlang-questions] : queues (previously: documentation of data structures)

Anders Ramsell <>
Fri Dec 14 23:50:15 CET 2007

 > > Anyways, queue:lait/1 should be liat/1 shouldn't it? Both in
 > > the doc and impl. (It is the opposite of tail. The opposite of
 > > cons/2 is snoc/2, the opposite of head/1 is daeh/1 but
 > > lists:reverse("tail") /= "lait").
 > Oh yes!!! I was tired when I wrote it, then self-blind, and
 > nobody proofread. If I get a reason to touch the module I will
 > add liat/1, forget about lait/1 but keep it around for backwards
 > compatibility...

(I'm going to stick my neck out now. Hope I don't get beheaded.)

I think the API of the queue module is a mess. Full of weird
names and functions that do the same thing. Quite unlike most
other modules in stdlib. This is a pity because this module is
very useful. Or at least it could be - I'll get back to that.

If you're going to change it - change it a lot. My suggestion
would be something along these lines. First remove a few

Function:  Duplicate of:
daeh       last
in_r       cons
lait       init
snoc       in

But we still have some weird names left. How do you 'init' a
queue by removing something from it? And out_r isn't all that
beautiful either. Then we have 'head' as the opposite of 'last'.

I would rename those and a few more to get something that I think
look like a "consistent" naming.

Function:  Rename to:
init       drop_last
out_r      out_last
head       first
tail       drop_first
cons       in_first

Of course all the old names would have to remain for a few
versions for backwards compatibility reasons.

Now back to what I hinted at before. The names of the API are
important but what they do is of course much more important and
the API is quite complete. But one, in my opinion, very important
function is missing. This fact has kept me from using this module
and roll my own on more than one occasion. There is no function
that removes a specified item no matter where in the queue it is.
Sometimes you just get tired of queueing.

No matter what you think of the rest of this mail please add that
function. Keeping to my own suggested names it could be called
'drop'. I know it can't be O(1) but that doesn't matter.

Well? Will I know get pummeled into my shoes like the noob I am
or do I have a point?


More information about the erlang-questions mailing list