Example how to use predsort(:Compare, +List, -Sorted) in prolog

mergesort, prolog, sorting, swi-prolog

Solution

Try this :

cheaper(>, n(_,C1,_),n(_,C2,_)) :-
        C1>C2.

cheaper(<, n(_,C1,_),n(_,C2,_)) :-
        C1<C2.

cheaper(=, n(_,C1,_),n(_,C2,_)) :-
        C1=C2.

Be aware that predsort works like sort, there are no doubles ! If you want to keep doubles, try

cheaper(>, n(_,C1,_),n(_,C2,_)) :-
        C1>C2.

cheaper(<, n(_,C1,_),n(_,C2,_)) :-
        C1=<C2.

Problem

I want to order a custom list. The list I want to order will be in this form... ``` [n(_,2,_),n(_,1,_),n(_,3,_)] ``` I have wrote a comparator ``` cheaper(n(_,C1,_),n(_,C2,_)) :- C1>C2. ``` How do I use this with predsort. I wrote a sorting algorithm using bubble sort, but I have very large lists so it very slow. Is it possible to do ``` predsort(cheaper, [n(_,2,_),n(_,1,_),n(_,3,_)] , X). ``` Thank you :)

Original source