如何从序言中的变量列表中删除变量?
How to remove a variable out of a list of variables in prolog?
我想实现DPLL算法。因此,我必须删除其他变量列表中某个变量的所有出现,例如从 [neg(X), pos(X), neg(Y), pos(Y)]
中删除 neg(X)
应该 return [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
统一谓词。
我想实现DPLL算法。因此,我必须删除其他变量列表中某个变量的所有出现,例如从 [neg(X), pos(X), neg(Y), pos(Y)]
中删除 neg(X)
应该 return [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
统一谓词。