我想实现DPLL算法。因此,我必须删除其他变量列表中变量的所有occurrency,例如,从[neg(X), pos(X), neg(Y), pos(Y)]
中删除neg(X)
应该返回[pos(X), neg(Y), pos(Y)]
。 我已经尝试了一些内置谓词,例如 exclude/3 或 delete/3,但都让我假设X = Y
和结果[pos(X), pos(Y)]
,删除了所有 neg(_(,但我只想删除 neg(X( 而不是 neg(Y(。这在某种程度上可能吗?
来自 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
统一谓词。