lists:sort/2

Erik Stenman Erik.Stenman@REDACTED
Tue Jun 3 18:06:22 CEST 2003


I can't see that any of your functions could be right
Take the elements {1,2} and {4,1}
  {1,2} < {4,1} AND {4,1} < {1,2} !!!

You have to make a total order like:
F1 = fun ({X1,Y1},{X2,Y2}) -> if (X1 < 3) or (X2 < 3) -> X1 < X2; true -> Y1
< Y2 end end. 

Or 
 F2 = fun ({X1,Y1},{X2,Y2}) -> if (X1 < 3) and (X2 < 3) -> X1 < X2; true ->
Y1 < Y2 end end.

Depending on what you mean by "I wanted a list sorted on P for all P < 3,
and sorted on R for the remainder." (From your example I guess you want
solution 1).

6> lists:sort(F1,L).                                            
[{1,11.2000},{1,10.1000},{2,10.2000},{3,10.3000},{4,10.4000}]

> -----Original Message-----
> From: owner-erlang-questions@REDACTED 
> [mailto:owner-erlang-questions@REDACTED] On Behalf Of Ulf Wiger
> Sent: den 3 juni 2003 17:47
> To: erlang-questions@REDACTED
> Subject: lists:sort/2
> 
> 
> 
> I encountered some surprising results when using
> lists:sort/2. Given a list [{P,R}], I wanted a list sorted
> on P for all P < 3, and sorted on R for the remainder.
> I tried two different funs on the same list. The second one 
> below produced the wanted result. The first one didn't. There 
> is no help from the documentation in explaining why this 
> happens, or indeed that there is a difference.
> 
> Does anyone feel acquainted enough with the sorting
> algorithm to explain the phenomenon? Am I using the function
> in a way that was never intended?
> 
> /Uffe
> 
> L = [{1, 10.1},
>      {4, 10.4},
>      {1, 11.2},
>      {3, 10.3},
>      {2, 10.2}].
>  --> [{1,10.1000},{4,10.4000},{1,11.2000},{3,10.3000},{2,10.2000}]
> 
> lists:sort(
>   fun({P1,_}, {P2,_}) when P1 < 3 ->
> 	  P1 < P2;
>      ({_,R1}, {_,R2}) ->
> 	  R1 < R2
>   end, L).
>  --> [{1,10.1000},{4,10.4000},{1,11.2000},{2,10.2000},{3,10.3000}]
> 
> lists:sort(
>   fun({P1,_}, {P2,_}) when P2 < 3 ->
> 	  P1 < P2;
>      ({_,R1}, {_,R2}) ->
> 	  R1 < R2
>   end, L).
>  --> [{1,11.2000},{1,10.1000},{2,10.2000},{3,10.3000},{4,10.4000}]
> 
> 
> /Uffe
> -- 
> Ulf Wiger, Senior Specialist,
>    / / /   Architecture & Design of Carrier-Class Software
>   / / /    Strategic Product & System Management
>  / / /     Ericsson AB, Connectivity and Control Nodes
> 
> 




More information about the erlang-questions mailing list