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

Объяснение кода листинга программы

В коде присутствуют следующие элементы:

  1. Объявление типов данных и переменных:
    • Тип данных: i=integer
    • Переменные: mn=i*
  2. Объявление предикатов:
    • 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)
  3. Определение функций для работы с предикатами:
    • 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).
  4. Ввод-вывод данных:
    • Ввод первого множества: Введите первое множество:
    • Ввод второго множества: Введите второе множество:
    • Ввод третьего множества: Введите третье множество:
    • Вывод результата: Результат:
  5. Цель программы:
    • rezult(A,B,C,X)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.533 из 5
Похожие ответы