Создать предикат нахождения объединения пересечения первых двух множеств с третьим - Prolog

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

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

Создать предикат нахождения множества, которое получается в результате выполнения следующих действий с тремя множествами А∩В∪С

Решение задачи: «Создать предикат нахождения объединения пересечения первых двух множеств с третьим»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. memb(int,intl)
  7. inters(intl,intl,intl)
  8. union(intl,intl,intl)
  9. task(intl,intl,intl,intl)
  10.  
  11. clauses
  12. memb(_,[]) :- fail.
  13. memb(H,[H|_]) :- !.
  14. memb(H,[Z|T]) :- H <> Z, memb(H,T).
  15.  
  16. inters([],_,[]).
  17. inters([H|T],Z,[H|Q]) :- memb(H,Z), inters(T,Z,Q).
  18. inters([H|T],Z,Q) :- not(memb(H,Z)), inters(T,Z,Q).
  19.  
  20. union([],X,X).
  21. union([H|T],X,Y) :- memb(H,X), union(T,X,Y).
  22. union([H|T],X,[H|Y]) :- not(memb(H,X)), union(T,X,Y).
  23.  
  24. task(A,B,C,D) :- inters(A,B,AB), union(AB,C,D).

Объяснение кода листинга программы

  1. Создаются домены: int - целочисленный тип данных, intl - указатель на целочисленный тип данных.
  2. Создаются предикаты: memb - для проверки принадлежности элемента множеству, inters - для нахождения пересечения множеств, union - для нахождения объединения множеств, task - для решения задачи.
  3. Создаются клаузы:
    • memb(_,[]) - непустое множество не содержит пустое множество.
    • memb(H,[H|]) - элемент H содержится в множестве [H|].
    • memb(H,[Z|T]) - элемент H содержится в множестве [Z|T], если он не равен Z.
    • inters([],_,[]) - если первое и второе множества пустые, то пересечение пустое.
    • inters([H|T],Z,[H|Q]) - если элемент H содержится в множестве Z, то пересечение множеств [H|T] и Z - это [H|Q], иначе оно равно пересечению множеств T и Z.
    • inters([H|T],Z,Q) - если элемент H не содержится в множестве Z, то пересечение множеств [H|T] и Z - это Q.
    • union([],X,X) - объединение пустого множества и X равно X.
    • union([H|T],X,Y) - если элемент H содержится в множестве X, то объединение множеств [H|T] и X - это Y.
    • union([H|T],X,[H|Y]) - если элемент H не содержится в множестве X, то объединение множеств [H|T] и X - это [H|Y].
    • task(A,B,C,D) - задача решается следующим образом: сначала находится пересечение множеств A и B (AB), затем оно объединяется с множеством C (D).

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


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

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

8   голосов , оценка 4.5 из 5

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

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

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