[erlang-questions] Swap 2 elements within a list a la Erlang ?

Richard Carlsson <>
Tue Jun 12 09:43:39 CEST 2007


ok wrote:
> Here's another approach:
> 
> 	random_partition(List) ->
> 	    random_partition(List, [], []).
> 
> 	random_partition([], Left, Right) ->
> 	    {Left,Right};
> 	random_partition([X|Xs], Left, Right) ->
> 	    U = random:uniform(),
> 	    if U >= 0.5 ->
> 		random_partition(Xs, Left, [X|Right])
> 	     ; U < 0.5 ->
> 		random_partition(Xs, [X|Left], Right)
> 	    end.
> 
> 	randomise([]) ->
> 	    [];
> 	randomise([X]) ->
> 	    [X];
> 	randomise(Bigger) ->
> 	    {Left, Right} = random_partition(Bigger),
> 	    randomise(Left) ++ randomise(Right).
> 
> This one really wants random bits, not random floats.  It actually
> needs the same number of random bits (ceiling(N.lgN)) as the Fisher-
> Yates method.

I think this should definitely go in the stdlib 'lists' module!

     /Richard




More information about the erlang-questions mailing list