Пролог — УТВЕРЖДЕНИЕ и ВЗЯТИЕ
-
19-09-2019 - |
Вопрос
Мне было интересно, я знаю, что вы можете использовать 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.
Не связан с StackOverflow