述語を-:dynamic
と宣言した場合は、assert
を使用してファクトやルールなどを追加できることは承知していますが、これでは、加えられた変更のみを保持できます。そのセッションのみ、例えばPrologウィンドウを閉じると、データベースの変更は失われます。
だから私は疑問に思っていました、assert
とretract
述語が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.