Прошу объяснить, как работает программа на прологе. Код взят из интернета
/*Определите предикат p(+V, +N, -L) - истинный тогда и только тогда, когда L - список элементов списка V, встречающихся в нем не менее N раз.
Проверьте работу этого предиката на примере [a, a, b, a, c, b, c, a, b, b, d, a, b] для N=1,2,5,0.*/
domains
list = symbol*
predicates
p(list, integer, list).
countdel(integer,integer,symbol,list,list).
countn(integer,integer,symbol,list,list).
clauses
p([A|B],N,C) :- !, countdel(1,Na,A,B,Bn), p(Bn,N,D), countn(N,Na,A,D,C).
p(_,_,[]).
countdel(A,B,C,[C|D],E) :- !, F=A+1, countdel(F,B,C,D,E).
countdel(A,B,C,[D|E],[D|F]) :- !, countdel(A,B,C,E,F).
countdel(A,A,_,_,[]).
countn(A,B,C,D,[C|D]) :- B>=A, !.
countn(_,_,_,A,A).
goal
%p([a, a, b, a, c, b, c, a, b, b, d, a, b],1,L).
%p([a, a, b, a, c, b, c, a, b, b, d, a, b],2,L).
%p([a, a, b, a, c, b, c, a, b, b, d, a, b],5,L).
%p([a, a, b, a, c, b, c, a, b, b, d, a, b],0,L).
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |