asserta - Prolog-ASSERT y RETRACT
dynamic prolog (1)
Me preguntaba, estoy consciente de que puede usar assert
para agregar hechos o reglas o lo que sea si ha declarado que el predicado es -:dynamic
, pero esto solo permite que los cambios realizados se mantengan solo en esa sesión, por ejemplo, si Cierra la ventana de Prolog y los cambios en la base de datos se pierden.
Así que me preguntaba: ¿hay alguna forma de hacerlo para que los predicados de retract
y retract
puedan realizar cambios permanentes en el archivo .pl de Prolog?
Gracias
Puedo sugerirte una manera muy simple de hacer esto.
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.
Luego cerrar sesión, 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.