Из библиотеки Logtalk list
объект:
delete([], _, []).
delete([Head| Tail], Element, Remaining) :-
( Head == Element ->
delete(Tail, Element, Remaining)
; Remaining = [Head| Tail2],
delete(Tail, Element, Tail2)
).
Пример вызова:
?- delete([neg(X), pos(X), neg(Y), pos(Y)], neg(X), Rest).
Rest = [pos(X), neg(Y), pos(Y)].
Ключ должен использовать стандартный ==/2
термин равенство предикат вместо стандартного =/2
унификация предикат.