Создать предикат, нахождения множества - Prolog

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

Добрый день! помогите создать предикат, нахождения множества , которое получается в результате выполнения следующих действий над тремя множествами А - (В∩С)

Код к задаче: «Создать предикат, нахождения множества - 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).

15   голосов, оценка 3.533 из 5


СОХРАНИТЬ ССЫЛКУ