不可预测的动态谓词行为

时间:2013-04-27 20:41:54

标签: list prolog prolog-assert

我遇到了一个问题,需要我将元素添加到遍布各种谓词的列表中。我没有选择使用基于参数的列表,而是选择使用动态列表谓词。我可以在下面看到简单的例子。当我最初使用它时它工作正常,但现在如果我使用任何参数作为X它仍然保持从列表中检索以前的参数数据,即使在关闭程序和重新编译之后。有人知道它有什么问题吗?

//list declarations
:- dynamic listD/1.
listD([]).

//pushes X onto the list then retrieves the entire list for verification
sample(X):-
    assert(listD(X)),
    listD(Y),
    write(Y).


Example usage

sample([adam]).
//prints adam fine
sample([fred]).
//prints adam again

1 个答案:

答案 0 :(得分:0)

启动时使用retractall清除状态。

sample(X):-
    retractall(listD(_)),
    assert(listD(X)),
    listD(Y),
    write(Y).