Создать предикат, нахождения множества - Prolog
Формулировка задачи:
Добрый день! помогите создать предикат, нахождения множества , которое получается в результате выполнения следующих действий над тремя множествами А - (В∩С)
Решение задачи: «Создать предикат, нахождения множества»
textual
Листинг программы
domains
i=integer
mn=i*
predicates
member(i,mn)
intersection(mn,mn,mn)
minus(mn,mn,mn)
delete_all(i,mn,mn)
list_set(mn,mn)
start(mn)
rezult(mn,mn,mn,mn)
clauses
member(X,[X|_]):-!.
member(X,[_|T]):-member(X,T).
intersection([],_,[]).
intersection([H|T1],S2,[H|T]):-member(H,S2),!,intersection(T1,S2,T).
intersection([_|T],S2,S):-intersection(T,S2,S).
minus([],_,[]).
minus([Z|T],S2,S):-member(Z,S2), !, minus(T,S2,S).
minus([Z|T],S2,[Z|S]):-minus(T,S2,S).
delete_all(_,[],[]).
delete_all(X,[X|L],L1) :- delete_all(X,L,L1).
delete_all(X,[Y|L],[Y|L1]) :- X<>Y, delete_all(X,L,L1).
list_set([],[]).
list_set([H|T],[H|T1]) :- delete_all(H,T,T2), list_set(T2,T1).
start(X1):-readterm(mn,X),list_set(X,X1).
rezult(A,B,C,X):-intersection(В,С,D),minus(A,D,X).
goal
write("Введите первое множество: "),
start(A),
write("Введите второе множество: "),
start(B),
write("Введите третье множество: "),
start(C),
rezult(A,B,C,X),
write("Результат: ",X).
Объяснение кода листинга программы
В коде присутствуют следующие элементы:
- Объявление типов данных и переменных:
- Тип данных: i=integer
- Переменные: mn=i*
- Объявление предикатов:
- member(i,mn)
- intersection(mn,mn,mn)
- minus(mn,mn,mn)
- delete_all(i,mn,mn)
- list_set(mn,mn)
- start(mn)
- rezult(mn,mn,mn,mn)
- Определение функций для работы с предикатами:
- member(X,[X|_]):-!.
- member(X,[_|T]):-member(X,T).
- intersection([],_,[]).
- intersection([H|T1],S2,[H|T]):-member(H,S2),!,intersection(T1,S2,T).
- intersection([_|T],S2,S):-intersection(T,S2,S).
- minus([],_,[]).
- minus([Z|T],S2,S):-member(Z,S2), !, minus(T,S2,S).
- minus([Z|T],S2,[Z|S]):-minus(T,S2,S).
- deleteall(,[],[]).
- delete_all(X,[X|L],L1) :- delete_all(X,L,L1).
- delete_all(X,[Y|L],[Y|L1]) :- X<>Y, delete_all(X,L,L1).
- list_set([],[]).
- list_set([H|T],[H|T1]) :- delete_all(H,T,T2), list_set(T2,T1).
- start(X1):-readterm(mn,X),list_set(X,X1).
- rezult(A,B,C,X):-intersection(В,С,D),minus(A,D,X).
- Ввод-вывод данных:
- Ввод первого множества:
Введите первое множество: - Ввод второго множества:
Введите второе множество: - Ввод третьего множества:
Введите третье множество: - Вывод результата:
Результат:
- Ввод первого множества:
- Цель программы:
- rezult(A,B,C,X)