如何从 prolog 中的变量列表中删除变量?



我想实现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统一谓词。

相关内容

  • 没有找到相关文章

最新更新