Список чисел, встречающихся в двух списках одинаковое число раз - Prolog
Формулировка задачи:
Даны два непустых списка целых чисел L1 и L2. Создать программу, которая строит список L3, содержащий (без повторений) все числа, одинаковое количество раз встречающиеся в L1 и L2. Запрос: R(L1, L2, L3).
Помогите пожалуйста, не знаю как решить...
Решение задачи: «Список чисел, встречающихся в двух списках одинаковое число раз»
textual
Листинг программы
- domains
- int=integer
- intl=int*
- predicates
- delall(int,intl,intl)
- len(intl,int)
- freq(int,intl,int)
- cmp(int,intl,intl)
- mkl(intl,intl,intl,intl)
- memb(int,intl)
- inters(intl,intl,intl)
- task(intl,intl,intl)
- clauses
- delall(_,[],[]).
- delall(X,[X|T],Z) :- delall(X,T,Z).
- delall(X,[Y|T],[Y|Z]) :- X<>Y,delall(X,T,Z).
- len([],0).
- len([_|T],N) :- len(T,N1), N=N1+1.
- freq(X,Z,N) :- delall(X,Z,XX), len(XX,L1), len(Z,L0), N=L0-L1.
- cmp(A,X,Y) :- freq(A,X,N1), freq(A,Y,N2), N1=N2.
- memb(_,[]) :- fail.
- memb(X,[X|_]).
- memb(X,[Y|T]) :- X<>Y, memb(X,T).
- inters([],_,[]).
- inters([X|T],Y,[X|R]) :- memb(X,Y), delall(X,Y,YY), delall(X,T,TT), inters(TT,YY,R).
- inters([X|T],Y,R) :- not(memb(X,Y)), delall(X,T,TT), inters(TT,Y,R).
- mkl([],_,_,[]).
- mkl([H|XY],X,Y,[H|R]) :- cmp(H,X,Y), mkl(XY,X,Y,R).
- mkl([H|XY],X,Y,R) :- not(cmp(H,X,Y)), mkl(XY,X,Y,R).
- task(X,Y,R) :- inters(X,Y,XY), mkl(XY,X,Y,R).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д