我想知道,我知道,你可以使用assert添加事实或规则或任何你需要声明谓词被-:dynamic,但这仅允许保存在该届会议上而已,例如那些所作的更改如果关闭Prolog的窗口,然后对数据库的修改都将丢失。

所以我想知道,有没有使得它使得assertretract谓词可以对Prolog的永久性变化.PL文件的任何方式?

由于

有帮助吗?

解决方案

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

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.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top