2010-03-12 90 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