Операции над множествами - Prolog

Узнай цену своей работы

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

Всем доброе время суток! Случились трудности с написанием программы. На прологе нужно написать функцию пересечения множеств и функцию разности множеств. Кто-то может помочь? Буду невероятно благодарна!

Решение задачи: «Операции над множествами»

textual
Листинг программы
cross(L,[],L).
cross(L,[H|T],L1):-member(H,L),
                          cross(L,T,L1).
cross(L,[H|T],[H|L1]):-cross(L,T,L1).
 
diff([],_,[]).
diff([H|T],L,T1):-member(H,L),
                       diff(T,L,T1).
diff([H|T],L,[H|T1]):-diff(T,L,T1).
 
member(H,[H|_]).
member(H,[_|T]):-member(H,T).

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

  1. cross(L,[],L). - базовый случай, когда первый аргумент пуст, то есть пустое множество, тогда результат будет также пустым множеством.
  2. cross(L,[H|T],L1):-member(H,L), - если первый аргумент не пуст, то есть в нем есть элемент H, то рекурсивно вызывается процедура cross для оставшихся элементов L и T, при этом результат L1 будет содержать элемент H.
  3. cross(L,[H|T],[H|L1]):-cross(L,T,L1). - если элемент H не найден в первом аргументе L, то рекурсивно вызывается процедура cross для оставшихся элементов L и T, при этом результат L1 будет содержать все элементы из T, добавленный в начало элементом H.
  4. diff([],_,[]). - базовый случай, когда первый и второй аргументы пустые множества, то есть нет ни одного общего элемента, тогда результат также будет пустым множеством.
  5. diff([H|T],L,T1):-member(H,L), - если первый аргумент не пуст, то есть в нем есть элемент H, то рекурсивно вызывается процедура diff для оставшихся элементов T и L, при этом результат T1 будет содержать все элементы из T, которые не содержатся в L.
  6. diff([H|T],L,[H|T1]):-diff(T,L,T1). - если элемент H не найден в первом аргументе L, то рекурсивно вызывается процедура diff для оставшихся элементов T и L, при этом результат T1 будет содержать все элементы из T, которые не содержатся в L, с добавлением элемента H в начало.
  7. member(H,[H|_]). - базовый случай, когда искомый элемент H является первым элементом в списке, то есть он является членом этого списка.
  8. member(H,[_|T]):-member(H,T). - если искомый элемент H не является первым элементом в списке, то есть он находится в T, то рекурсивно вызывается процедура member для T.

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


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

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

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