Создать список - 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д