Prolog - affermare e RETRACT
-
19-09-2019 - |
Domanda
Mi chiedevo, mi rendo conto che si può usare per aggiungere assert
fatti o regole o qualsiasi altra cosa se si è dichiarato il predicato da -:dynamic
, ma questo consente solo le modifiche apportate da tenere in quella sessione unica, per esempio se si chiude la finestra Prolog poi si perdono le modifiche al database.
Quindi mi chiedevo, non v'è alcun modo di fare in modo che i predicati assert
e retract
possono apportare modifiche permanenti al Prolog .pl il file?
Grazie
Soluzione
ti posso suggerire un modo molto semplice di fare questo.
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.
Quindi chiudere la sessione, riaprire.
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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow