Множества Лекция 8
План Создание множества Операции со множествами (объединение, пересечение, разность, проверка включения, симметрическая разность, дополнение)
Создание множества list_set([],[]). /* пустой список является множеством */ list_set ([H|T],[H|T1]) :– delete_all(H,T,T2), /* T2 результат удаления вхождений первого элемента исходного списка H из хвоста T */ list_set (T2,T1). /* T1 результат удаления повторных вхождений элементов из списка T2 */
Объединение множеств union([ ],S2,S2). union([H|T],S2,S):– member3(H,S2), !, union(T,S2,S). union([H |T],S2,[H|S]):– union(T,S2,S).
Пересечение множеств intersection([],_,[]). intersection([H|T1],S2,[H|T]):– member3(H,S2), !, intersection(T1,S2,T). intersection([_|T],S2,S):– intersection(T,S2,S).
Разность множеств minus([],_,[]). minus([H|T],S2,S):– member3(H,S2), !, minus(T,S2,S). minus([H|T],S2,[H|S]):– minus(T,S2,S).
Проверка включения subset([],_). subset([H|T],S):– member3(H,S), subset(T,S). subsetU(A,B):– union(A,B,B). subsetI(A,B):– intersection(A,B,A).
Проверка включения equal(A,B):– subset(A,B), subset(B,A). Prop_subset(A,B):– subset(A,B), not(equal(A,B)).
Симметрическая разность Sim_minus(A,B,SM):– minus(A,B,A_B), minus(B,A,B_A), union(A_B,B_A,SM).
Дополнение множества supp(A,D):– U=[0,1,2,3,4,5,6,7,8,9], minus(U,A,D).
Объединение через пересечение и дополнение unionI(A,B,AB):– supp(A,A_), supp(B,B_), intersection(A_,B_,A_B), supp(A_B,AB). intersectionU(A,B,AB):– supp(A,A_), supp(B,B_), union(A_,B_,A_B), supp(A_B,AB).
Задачи для самостоятельного решения Написать предикат, вычисляющий результат объединения трех списков Написать предикат, вычисляющий результат пересечения трех списков Написать предикат, вычисляющий результат разности списков A\B\C