retractall asserta prolog prolog-assert

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.