Создать предикат, нахождения множества - 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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д