2013-04-27 42 views
0

我有一个问题,需要我将元素添加到遍布各种谓词的列表中。我选择使用动态列表谓词,而不是通过基于参数的列表来做。我简单的例子可以看到下面。当我最初使用它时,它工作正常,但现在如果我使用任何参数作为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 
+0

花时间学习正确的序言:避免断言尽可能 – CapelliC 2013-04-27 23:28:02

+0

是我的答案有帮助吗?别的东西还不清楚? – 2013-04-28 15:08:14

回答

0

使用retractall在开始时清理状态。

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