2010-03-12 74 views
23

我想知道,我知道你可以使用assert添加事實或規則或任何如果你聲明謂詞爲-:dynamic,但這隻允許所做的更改保留在那僅會話,例如如果關閉Prolog窗口,則數據庫更改將丟失。Prolog - ASSERT和RETRACT

所以我想知道,是否有任何方法使得assertretract謂詞可以對Prolog .pl文件進行永久更改?

謝謝

回答

37

我可以建議你一個非常簡單的方法來做到這一點。

1 ?- assert(a(1)). 
true. 

2 ?- assert(a(2)). 
true. 

3 ?- assert(a(3)). 
true. 

4 ?- a(A). 
A = 1 ; 
A = 2 ; 
A = 3. 

5 ?- tell('a_db.txt'), listing(a), told. 
true. 

然後關閉會話,重新打開。

1 ?- a(A). 
ERROR: toplevel: Undefined procedure: a/1 (DWIM could not correct goal) 
2 ?- ['a_db.txt']. 
% a_db.txt compiled 0.00 sec, 516 bytes 
true. 

3 ?- a(A). 
A = 1 ; 
A = 2 ; 
A = 3. 

4 ?- listing(a). 
:- dynamic a/1. 

a(1). 
a(2). 
a(3). 

true. 
+2

感謝,似乎工作,我只是想知道是否有可能將swi指向特定目錄而不是默認目錄?當然當使用tell命令時, – KP65 2010-03-13 16:47:11