Я пытаюсь написать фильтр предикатов / 3
пример filter([a,a,b,c,d,d],[a,d],L)
и L объединить с [b, c]
я уже пишу предикат delete / 3, и я использую этодля моего фильтра
delete([],_,[]).
delete([A|X],E,Z) :- A==E, delete(X,E,Z).
delete([A|X],E,[A|Z]) :- A \== E, delete(X,E,Z).
filter(M,[],M).
filter([K|M],[E|N],Z) :- delete([K|M],E,Z), filter(Z,N,B).
Удаление работает хорошо, но фильтра нет, пример с трассировкой
filtre([1,1,3,7,7],[1,7],Z).
В последней строке трассы дерева есть:
N-3 Call: (10) filtre([3], [], _18304470) ? creep
N-2 Exit: (10) filtre([3], [], [3]) ? creep
N-1 Exit: (9) filtre([3, 7, 7], [7], [3]) ? creep
N Exit: (8) filtre([1, 1, 3, 7, 7], [1, 7], [3, 7, 7]) ? creep
Строки N-3 и N-2, я вижу, пролог нашел правильный результат, но он возвращает [3,7,7] вместо [3], и я не понимаю, почему он не останавливаетсяна линии N-2.