Prolog - ASSERT和RETRACT

KP6*_*P65 25 prolog prolog-assert

我想知道,我知道你可以assert用来添加事实或规则,或者如果你已经声明了谓词-:dynamic,但是这只允许在那个会话中保留所做的更改,例如,如果你关闭了Prolog窗口然后数据库更改丢失.

所以我想知道,有没有办法使它assertretract谓词可以对Prolog .pl文件进行永久性更改?

谢谢

小智 39

我可以建议你这样做的一个非常简单的方法.

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.
Run Code Online (Sandbox Code Playgroud)

然后关闭会话,重新打开.

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.
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,似乎工作,我只是想知道是否有可能将swi指向特定目录而不是默认目录?当然使用tell命令时, (2认同)