Создать список - Prolog

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

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

Даны два непустых списка целых чисел L1 и L2. Создать программу, которая находит значение Xmax максимального элемента в списке L1 и строит список L3, состоящий (без повторений) из элементов списка L2, встречающихся в нем ровно Xmах раз. Запрос: R(L1,L2, Xmax, L3). Помогите, пожалуйста)

Решение задачи: «Создать список»

textual
Листинг программы
domains 
int=integer
intl=int*
 
predicates
max_el(intl,int)
del_all(intl,int,intl)
counter(intl,int,int)
filt_count(intl,int,intl)
task(intl,intl,intl)
 
clauses
max_el([X],X).
max_el([H|T],R) :- max_el(T,R), H<=R.
max_el([H|T],H) :- max_el(T,R1), H>R1.
 
del_all([],_,[]).
del_all([X|T],X,R) :- del_all(T,X,R).
del_all([H|T],X,[H|R]) :- del_all(T,X,R), H<>X.
 
counter([],_,0).
counter([H|T],H,R) :- counter(T,H,R1), R=R1+1.
counter([X|T],H,R) :- H<>X, counter(T,H,R).
 
filt_count([],_,[]).
filt_count([H|T],N,[H|TT]) :- counter([H|T],H,N), del_all(T,H,T1), filt_count(T1,N,TT).
filt_count([H|T],N,TT) :- counter([H|T],H,N1), N<>N1, del_all(T,H,T1), filt_count(T1,N,TT).
 
task(L1,L2,L3) :- max_el(L1,MAXL), filt_count(L2,MAXL,L3).

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


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

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

7   голосов , оценка 3.857 из 5
Похожие ответы