Написать предикат, который формирует список из наиболее часто встречающихся элементов списка - Prolog

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

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

необходимо реализовать данную задачу, вот как бы нашлось такое :
Листинг программы
  1. len([],0).
  2. len([_|T],N) :- len(T,N1), N is N1+1.
  3. del([],_,[]).
  4. del([N|T],N,Q) :- del(T,N,Q).
  5. del([H|T],N,[H|Q]) :- N \= H, del(T,N,Q).
  6. task([],_,[]).
  7. task([H|T],N,[H|Q]) :- del(T,H,T1), len(T1,L1), len(T,L), L - L1+1 >= N, task(T1,N,Q).
  8. task([H|T],N,Q) :- del(T,H,T1), len(T1,L1), len(T,L), L - L1+1 < N, task(T1,N,Q).
тут мы изначально забиваем необходимую частоту встречаемости, а вот как сделать так чтобы эта частота встречаемости считалась и просто выбирались частые символы. Например: [0,3,5,7,1,5,3,0,3,3,5,7,0,5,0]–>[0,3,5] Заранее спасибо

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

textual
Листинг программы
  1. seq_qty(S, SQ2) :-
  2.     seq_qty(S, [], SQ),
  3.     sort(SQ, SQ1),
  4.     reverse(SQ1, SQ2).
  5.  
  6. seq_qty([], SQ, SQ).
  7. seq_qty([H | T], SQ0, SQ) :-
  8.     select1([N, H], SQ0, SQ1),
  9.     N1 is N + 1,
  10.     !,
  11.     seq_qty(T, [[N1, H] | SQ1], SQ).
  12. seq_qty([H | T], SQ0, SQ) :-
  13.     seq_qty(T, [[1, H] | SQ0], SQ).
  14.  
  15.  
  16. select1(X, [X|Tail], Tail).
  17. select1(Elem, [Head|Tail], [Head|Rest]) :-
  18.     select1(Elem, Tail, Rest).

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


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

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

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

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

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

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