[erlang-questions] Circular list

Colm Dougan <>
Fri Aug 22 15:34:24 CEST 2008


Hi,

If I have a list of a fixed size (say 10,000 elements).  What is the
most efficient way to add a new item to the list and force out the old
first element.  By most efficient I mostly mean without having to copy
the entire list each time, if that is even possible.

I'm currently doing a double reverse trick, e.g. :

Eshell V5.6.3  (abort with ^G)
1> L1 = ["A", "B", "C", "D", "E"].
["A","B","C","D","E"]
2> [_ | L2] = L1.
["A","B","C","D","E"]
3> lists:reverse(["F" | lists:reverse(L2)]).
["B","C","D","E","F"]

Is there a more efficient way?  I tried a benchmark and the reverse
seems more costly than I expected.

Colm



More information about the erlang-questions mailing list