1:- module(sort_dict, [
    2    sort_dict/3, % +Key, +List, -Sorted
    3    sort_dict/4  % +Key, +Direction, +List, -Sorted
    4]).

Sorts list of dicts by key

Sorts list of dicts by key. */

 sort_dict(+Key, +Direction, +List, -Sorted) is det
Sorts the list of dicts in the given direction. Direction is either asc or desc. Sorting is done by predsort/3. Throws error(invalid_direction(Direction)) when the Direction is neither asc or desc.
   18sort_dict(Key, Direction, List, Sorted):-
   19    (   Direction = asc
   20    ->  predsort(asc(Key), List, Sorted)
   21    ;   (   Direction = desc
   22        ->  predsort(desc(Key), List, Sorted)
   23        ;   throw(error(invalid_direction(Direction))))).
   24
   25asc(Key, Result, Dict1, Dict2):-
   26    Value1 = Dict1.Key,
   27    Value2 = Dict2.Key,
   28    (   Value1 @< Value2
   29    ->  Result = (<)
   30    ;   Result = (>)).
   31
   32desc(Key, Result, Dict1, Dict2):-
   33    Value1 = Dict1.Key,
   34    Value2 = Dict2.Key,
   35    (   Value2 < Value1
   36    ->  Result = (<)
   37    ;   Result = (>)).
 sort_dict(+Key, +List, -Sorted) is det
Does same as sort_dict/4 but uses asc as the default sorting direction.
   44sort_dict(Key, List, Sorted):-
   45    sort_dict(Key, asc, List, Sorted)