Подтвердить что ты не робот

Пролог - ASSERT и RETRACT

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

Итак, мне было интересно, есть ли способ сделать это так, чтобы предикаты assert и retract могли вносить постоянные изменения в файл Prolog.pl?

Спасибо

4b9b3361

Ответ 1

Я могу предложить вам очень простой способ сделать это.

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.