Список чисел, встречающихся в двух списках одинаковое число раз - Prolog

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

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

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

Решение задачи: «Список чисел, встречающихся в двух списках одинаковое число раз»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. delall(int,intl,intl)
  7. len(intl,int)
  8. freq(int,intl,int)
  9. cmp(int,intl,intl)
  10. mkl(intl,intl,intl,intl)
  11. memb(int,intl)
  12. inters(intl,intl,intl)
  13. task(intl,intl,intl)
  14.  
  15. clauses
  16. delall(_,[],[]).
  17. delall(X,[X|T],Z) :- delall(X,T,Z).
  18. delall(X,[Y|T],[Y|Z]) :- X<>Y,delall(X,T,Z).
  19.  
  20. len([],0).
  21. len([_|T],N) :- len(T,N1), N=N1+1.
  22.  
  23. freq(X,Z,N) :- delall(X,Z,XX), len(XX,L1), len(Z,L0), N=L0-L1.
  24.  
  25. cmp(A,X,Y) :- freq(A,X,N1), freq(A,Y,N2), N1=N2.
  26.  
  27. memb(_,[]) :- fail.
  28. memb(X,[X|_]).
  29. memb(X,[Y|T]) :- X<>Y, memb(X,T).
  30.  
  31. inters([],_,[]).
  32. inters([X|T],Y,[X|R]) :- memb(X,Y), delall(X,Y,YY), delall(X,T,TT), inters(TT,YY,R).
  33. inters([X|T],Y,R) :- not(memb(X,Y)), delall(X,T,TT), inters(TT,Y,R).
  34.  
  35. mkl([],_,_,[]).
  36. mkl([H|XY],X,Y,[H|R]) :- cmp(H,X,Y), mkl(XY,X,Y,R).
  37. mkl([H|XY],X,Y,R) :- not(cmp(H,X,Y)), mkl(XY,X,Y,R).
  38.  
  39. task(X,Y,R) :- inters(X,Y,XY), mkl(XY,X,Y,R).

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


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

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

9   голосов , оценка 4.444 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы