Написать предикат, который формирует список из наиболее часто встречающихся элементов списка - Prolog
Формулировка задачи:
необходимо реализовать данную задачу, вот как бы нашлось такое :
тут мы изначально забиваем необходимую частоту встречаемости, а вот как сделать так чтобы эта частота встречаемости считалась и просто выбирались частые символы.
Например: [0,3,5,7,1,5,3,0,3,3,5,7,0,5,0]–>[0,3,5]
Заранее спасибо
Листинг программы
- len([],0).
- len([_|T],N) :- len(T,N1), N is N1+1.
- del([],_,[]).
- del([N|T],N,Q) :- del(T,N,Q).
- del([H|T],N,[H|Q]) :- N \= H, del(T,N,Q).
- task([],_,[]).
- task([H|T],N,[H|Q]) :- del(T,H,T1), len(T1,L1), len(T,L), L - L1+1 >= N, task(T1,N,Q).
- task([H|T],N,Q) :- del(T,H,T1), len(T1,L1), len(T,L), L - L1+1 < N, task(T1,N,Q).
Решение задачи: «Написать предикат, который формирует список из наиболее часто встречающихся элементов списка»
textual
Листинг программы
- seq_qty(S, SQ2) :-
- seq_qty(S, [], SQ),
- sort(SQ, SQ1),
- reverse(SQ1, SQ2).
- seq_qty([], SQ, SQ).
- seq_qty([H | T], SQ0, SQ) :-
- select1([N, H], SQ0, SQ1),
- N1 is N + 1,
- !,
- seq_qty(T, [[N1, H] | SQ1], SQ).
- seq_qty([H | T], SQ0, SQ) :-
- seq_qty(T, [[1, H] | SQ0], SQ).
- select1(X, [X|Tail], Tail).
- select1(Elem, [Head|Tail], [Head|Rest]) :-
- select1(Elem, Tail, Rest).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д