List 为什么内置的delete谓词不能处理这个动态列表?(序言)
我有一个动态列表:List 为什么内置的delete谓词不能处理这个动态列表?(序言),list,dynamic,prolog,List,Dynamic,Prolog,我有一个动态列表: :- dynamic queue/1. queue([Bob,Steve,Richard,Katie]). 和一个谓词: delete_person(Person) :- queue(Q), retractall(queue(_)), delete(Q, Person, Z), assert(queue(Z)). 从逻辑上讲,我就是这样想的,但我显然犯了一个错误,因为在运行谓词delete\u person后,列表保持不变。这个代码段中存在多个问
:- dynamic queue/1.
queue([Bob,Steve,Richard,Katie]).
和一个谓词:
delete_person(Person) :-
queue(Q),
retractall(queue(_)),
delete(Q, Person, Z),
assert(queue(Z)).
从逻辑上讲,我就是这样想的,但我显然犯了一个错误,因为在运行谓词
delete\u person
后,列表保持不变。这个代码段中存在多个问题。首先,您发布了以下程序:
:- dynamic queue/1.
queue([Bob,Steve,Richard,Katie]).
delete_person(Person) :-
queue(Q),
delete(Q, Person, Z).
assert(queue(Z)).
然后我们仍然有以下单例警告:
Singleton variables: [Bob,Steve,Richard,Katie]
然后,至少程序编译时没有警告
现在我们可以谈谈实际问题:
?- delete_person(bob).
true.
?- queue(Q).
Q = [bob, steve, richard, katie] ;
Q = [steve, richard, katie].
优点:
此代码段中存在多个问题。首先,您发布了以下程序: :- dynamic queue/1. queue([Bob,Steve,Richard,Katie]). delete_person(Person) :- queue(Q), delete(Q, Person, Z). assert(queue(Z)). 然后我们仍然有以下单例警告: Singleton variables: [Bob,Steve,Richard,Katie] 然后,至少程序编译时没有警告 现在我们可以谈谈实际问题: ?- delete_person(bob). true. ?- queue(Q). Q = [bob, steve, richard, katie] ; Q = [steve, richard, katie]. 优点: