distance((X,Y), D) :- D is X * X + Y * Y. distance_sort(L, S) :- map_list_to_pairs(distance, L, P), keysort(P, SP), pairs_values(SP, S). :- L = [(1,2), (3,4), (1,3), (2,4), (1,8)], msort(L, S1), writeln(S1), distance_sort(L, S2), writeln(S2).