Efficient list rotation

Raimo Niskanen <>
Fri Apr 15 11:17:58 CEST 2005


Have a look at the module 'queue'. It implements a FIFO queue,
which can be used as a rotatable list.

 (Joel Reymont) writes:

> Folks,
> 
> Is there a more efficient version of this code? I understand that it's
> better to append to the head of the list and reverse afterwards but
> appending to the tail works with the logic of the task. 
> 
> I'm trying to rotate the list so that a particular item is at the tail of
> the list, that is if I rotate the list once more it will be at the head.
> 
> As a bit of background info, I need this for my poker logic as when a
> player makes a bet I rotate the list and place them at the tail. I might
> delete them right after or I might not.
> 
> -module(bar).
> -compile([export_all]).
> 
> rotate(_Target, []) ->
>     [];
> 
> rotate(Target, [H|T]) ->
>     rotate(Target, [H|T], none).
> 
> rotate(Target, [H|T], none) when Target =:= H ->
>     rotate(Target, T, H);
> 
> rotate(Target, [H|T], none) ->
>     rotate(Target, T ++ [H], none);
> 
> rotate(_Target, [], X) ->
>     [X];
> 
> rotate(_Target, [H|T], X) ->
>     [H|T] ++ [X].
> 
>     Thanks, Joel
> 
> -- 
> http://wagerlabs.com/tech
> 
> 

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list