Prolog - ASSERT e RETRACT
-
19-09-2019 - |
Pergunta
Eu estava pensando, estou ciente de que você pode usar assert
para adicionar fatos ou regras ou qualquer outra coisa se você declarou o predicado a ser -:dynamic
, mas isso só permite que as alterações que são feitas para ser mantido nessa sessão única, por exemplo, Se você fechar a janela Prolog seguida, as alterações de banco de dados são perdidas.
Então, eu estava perguntando, existe alguma maneira de fazê-lo de modo que os assert
e retract
predicados pode fazer alterações permanentes ao processo Prolog .pl?
Graças
Solução
posso sugerir-lhe uma maneira muito simples de fazer isso.
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.
Em seguida, fechar sessão, reabrir.
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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow