Prolog - 更新动态列表

时间:2015-03-25 18:27:28

标签: list search dynamic prolog

我想为广度搜索更新两个动态列表。虽然它们确实在后台更新,但它们在启动谓词中实例化的值不会更新。

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)).

为什么会发生这种情况?

谢谢!

0 个答案:

没有答案