Найти все элементы, которые имеют наибольшее число вхождений в список - Prolog
Формулировка задачи:
Если таких элементов несколько, то вывести их все.
Решение задачи: «Найти все элементы, которые имеют наибольшее число вхождений в список»
textual
Листинг программы
domains int=integer intl=int* intll=intl* predicates len(intl,int) del(intl,int,intl) mkpair(intl,intll) max2(intll,int) del_lt(intll,int,intll). mklist(intll,intl) task(intl,intl) clauses len([],0). len([_|T],N) :- len(T,N1), N=N1+1. del([],_,[]). del([X|T],X,R) :- del(T,X,R). del([H|T],X,[H|R]) :- H<>X, del(T,X,R). mkpair([],[]). mkpair([H|T],[[H,N]|R]):- del(T,H,TD), len(T,L0), len(TD,L), N=L0-L+1, mkpair(TD,R). max2([[_,Y]],Y). max2([[_,Y]|R],Z) :- max2(R,R1),Y>R1,Z=Y. max2([[_,Y]|R],Z) :- max2(R,R1),Y<=R1,Z=R1. del_lt([],_,[]). del_lt([[_,Y]|T],X,R):- Y<X, del_lt(T,X,R). del_lt([[A,Y]|T],X,[[A,Y]|R]):- Y=X, del_lt(T,X,R). mklist([],[]). mklist([[X|_]|R],[X|T]) :- mklist(R,T). task(X,R) :- mkpair(X,XX), max2(XX,MX), del_lt(XX,MX,XXX), mklist(XXX,R).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д