Пролог, список наиболее распространенных элементов списка

#prolog

Вопрос:

Напишите предикат, который формирует список наиболее распространенных элементов списка. Список вводится с клавиатуры во время выполнения предиката. Не используйте встроенные предикаты максимального поиска и сортировки! Например: [0,3,5,7,1,5,3,0,3,3,5,7,0,5,0] -gt; [0,3,5].

У меня есть такой код, но я не понимаю, что в нем делает функция «cou» и каково сравнение между K и MX.

 f :-  read(List),bubble_sort(List, SList) , cou(SList, _, ResList), write(ResList).   bubble_sort(InputList, SortList):-   swap(InputList, List) , !, bubble_sort(List, SortList).  bubble_sort(SortList, SortList).   swap([X,Y|List], [Y,X|List]):- X gt; Y.  swap([Z|List], [Z|List1]):- swap(List, List1).   cou([], 0, []).  cou([H|T], K, [H]) :-  foo([H|T], H, K, List), cou(List, MX, _), K gt; MX, !.  cou([H|T], MX, List1) :-  foo([H|T], H, K, List), cou(List, MX, List1), K lt; MX, !.  cou([H|T], MX, [H|List1]) :-  foo([H|T], H, K, List), cou(List, MX, List1), K =:= MX.   foo([], _, 0, []) :- !.  foo([H|T], X, 0, [H|T]) :- H == X, !.  foo([H|T], X, K, T1) :- H =:= X, foo(T, X, K1, T1), K is K1   1.  

Комментарии:

1. Так в чем же ваш вопрос?

2. Как работает функция «cou»