Операции над множествами - 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).
Объяснение кода листинга программы
cross(L,[],L).- базовый случай, когда первый аргумент пуст, то есть пустое множество, тогда результат будет также пустым множеством.cross(L,[H|T],L1):-member(H,L),- если первый аргумент не пуст, то есть в нем есть элементH, то рекурсивно вызывается процедураcrossдля оставшихся элементовLиT, при этом результатL1будет содержать элементH.cross(L,[H|T],[H|L1]):-cross(L,T,L1).- если элементHне найден в первом аргументеL, то рекурсивно вызывается процедураcrossдля оставшихся элементовLиT, при этом результатL1будет содержать все элементы изT, добавленный в начало элементомH.diff([],_,[]).- базовый случай, когда первый и второй аргументы пустые множества, то есть нет ни одного общего элемента, тогда результат также будет пустым множеством.diff([H|T],L,T1):-member(H,L),- если первый аргумент не пуст, то есть в нем есть элементH, то рекурсивно вызывается процедураdiffдля оставшихся элементовTиL, при этом результатT1будет содержать все элементы изT, которые не содержатся вL.diff([H|T],L,[H|T1]):-diff(T,L,T1).- если элементHне найден в первом аргументеL, то рекурсивно вызывается процедураdiffдля оставшихся элементовTиL, при этом результатT1будет содержать все элементы изT, которые не содержатся вL, с добавлением элементаHв начало.member(H,[H|_]).- базовый случай, когда искомый элементHявляется первым элементом в списке, то есть он является членом этого списка.member(H,[_|T]):-member(H,T).- если искомый элементHне является первым элементом в списке, то есть он находится вT, то рекурсивно вызывается процедураmemberдляT.