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

È stato utile?

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
scroll top