Создать предикат нахождения объединения пересечения первых двух множеств с третьим - 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).
Объяснение кода листинга программы
- Создаются домены: int - целочисленный тип данных, intl - указатель на целочисленный тип данных.
- Создаются предикаты: memb - для проверки принадлежности элемента множеству, inters - для нахождения пересечения множеств, union - для нахождения объединения множеств, task - для решения задачи.
- Создаются клаузы:
- 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).
- memb(_,
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д