我想实现 DPLL 算法。因此,我必须删除其他变量列表中所有出现的变量,例如删除neg(X)
应该[neg(X), pos(X), neg(Y), pos(Y)]
返回[pos(X), neg(Y), pos(Y)]
。我尝试了一些内置谓词,例如 exclude/3 或 delete/3 但都给我留下了假设X = Y
和结果[pos(X), pos(Y)]
,删除了所有 neg(_),但我只希望删除 neg(X) 而不是 neg(Y) . 这有可能吗?
问问题
330 次
1 回答
0
从 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
统一谓词。
于 2020-01-31T16:31:28.043 回答