Найти все элементы, которые имеют наибольшее число вхождений в список - Prolog

Узнай цену своей работы

Формулировка задачи:

Если таких элементов несколько, то вывести их все.

Решение задачи: «Найти все элементы, которые имеют наибольшее число вхождений в список»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4. intll=intl*
  5.  
  6. predicates
  7. len(intl,int)
  8. del(intl,int,intl)
  9. mkpair(intl,intll)
  10. max2(intll,int)
  11. del_lt(intll,int,intll).
  12. mklist(intll,intl)
  13. task(intl,intl)
  14.  
  15. clauses
  16. len([],0).
  17. len([_|T],N) :- len(T,N1), N=N1+1.
  18.  
  19. del([],_,[]).
  20. del([X|T],X,R) :- del(T,X,R).
  21. del([H|T],X,[H|R]) :- H<>X, del(T,X,R).
  22.  
  23. mkpair([],[]).
  24. mkpair([H|T],[[H,N]|R]):- del(T,H,TD), len(T,L0), len(TD,L), N=L0-L+1, mkpair(TD,R).
  25.  
  26. max2([[_,Y]],Y).
  27. max2([[_,Y]|R],Z) :- max2(R,R1),Y>R1,Z=Y.
  28. max2([[_,Y]|R],Z) :- max2(R,R1),Y<=R1,Z=R1.
  29.  
  30. del_lt([],_,[]).
  31. del_lt([[_,Y]|T],X,R):- Y<X, del_lt(T,X,R).
  32. del_lt([[A,Y]|T],X,[[A,Y]|R]):- Y=X, del_lt(T,X,R).
  33.  
  34. mklist([],[]).
  35. mklist([[X|_]|R],[X|T]) :- mklist(R,T).
  36.  
  37. task(X,R) :- mkpair(X,XX), max2(XX,MX), del_lt(XX,MX,XXX), mklist(XXX,R).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы