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

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

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

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

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

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
memb(int,intl)
inters(intl,intl,intl)
union(intl,intl,intl)
task(intl,intl,intl,intl)
 
clauses
memb(_,[]) :- fail.
memb(H,[H|_]) :- !.
memb(H,[Z|T]) :- H <> Z, memb(H,T).
 
inters([],_,[]).
inters([H|T],Z,[H|Q]) :- memb(H,Z), inters(T,Z,Q).
inters([H|T],Z,Q) :- not(memb(H,Z)), inters(T,Z,Q).
 
union([],X,X).
union([H|T],X,Y) :- memb(H,X), union(T,X,Y).
union([H|T],X,[H|Y]) :- not(memb(H,X)), union(T,X,Y).
 
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
Похожие ответы