Вопрос

Мне было интересно, я знаю, что вы можете использовать assert добавить факты или правила или что-то еще, если вы объявили предикат -:dynamic, но это позволяет сохранять только внесенные изменения только в этом сеансе, например.если вы закроете окно Пролога, изменения базы данных будут потеряны.

Поэтому мне было интересно, есть ли способ сделать так, чтобы 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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top