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