2013-04-27 27 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).