我想为广度搜索更新两个动态列表。虽然它们确实在后台更新,但它们在启动谓词中实例化的值不会更新。
initialise(Start) :-
retractall(openlist(_)),
retractall(closedlist(_)),
assert(openlist([(Start,Start)])),
assert(closedlist([])).
这里的开放清单和关闭开启分别是[[开始,开始]]和[]
然后迭代我的搜索,但OPEN和CLOSE变量不会更新,虽然openlist和closedlist确实更新(如果我运行列表(openlist)或列表(closedlist),他们确实更新但只更新一次,仅用于第一次迭代。之后他们被锁定在那些变量中)
iterate :-
openlist(OPEN),
closedlist(CLOSE),
OPEN = [(X,Y)|T],
append(CLOSE,OPEN,R1),
retractall(openlist(_)),
retractall(closedlist(_)),
assert(closedlist(R1)),
back(X,M),
append(M,OPEN,Result),
diff(Result, R1, M3),
assert(openlist(M3)).
为什么会发生这种情况?
谢谢!