【发布时间】:2010-03-12 19:27:01
【问题描述】:
我想知道,我知道您可以使用 assert 添加事实或规则,或者如果您已将谓词声明为 -:dynamic,则仅允许在该会话中保留所做的更改仅,例如如果关闭 Prolog 窗口,则数据库更改将丢失。
所以我想知道,有没有办法让assert 和retract 谓词可以对Prolog .pl 文件进行永久更改?
谢谢
【问题讨论】:
标签: prolog prolog-assert
我想知道,我知道您可以使用 assert 添加事实或规则,或者如果您已将谓词声明为 -:dynamic,则仅允许在该会话中保留所做的更改仅,例如如果关闭 Prolog 窗口,则数据库更改将丢失。
所以我想知道,有没有办法让assert 和retract 谓词可以对Prolog .pl 文件进行永久更改?
谢谢
【问题讨论】:
标签: prolog prolog-assert
我可以建议你一个非常简单的方法。
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.
【讨论】: