Объяснение готового задания (вычисление "разности множеств") - Prolog
Формулировка задачи:
Помогите, пожалуйста, разобраться с задачей.
Заданы s1 и s2 - "множества с повторяющими элементами". Необходимо определить предикат p(+S1,+S2,?S), который вычисляет "разность множеств". Например
p([ 1, 2, 1, 2, 1, 3], [5, 3, 3, 1, 2, 2], S) должен давать результат S=[1, 1];
Вот есть код, но не совсем понятно что именно делает каждая строка(особенно во 2 части программы). Объясните пожалуйста, кому не сложно)
Листинг программы
- r(L,[],L).
- r(L,[H|Tail],Ans):-del(L,H,Temp),r(Temp,Tail,Ans).
- del([],_,[]).
- del([H|Tail],H,Tail):- !.
- del([H|Tail],X,[H|NewTail]):-del(Tail,X,NewTail).
Решение задачи: «Объяснение готового задания (вычисление "разности множеств")»
textual
Листинг программы
- del([],_,[]). % Если что угодно удалять из пустого списка, будет пустой список
- del([H|Tail],H,Tail):- !. % Если голова списка совпадает с удаляемым элементом, ответом будет хвост списка
- del([H|Tail],X,[H|NewTail]):-del(Tail,X,NewTail). % Иначе голова переносится в ответ, а хвосты списков обрабатываются рекурсивно
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д