usar tutorial swi instalar descarga como file prolog swi-prolog

file - tutorial - Swi Prolog, descargando archivos fuente



swi prolog manual (3)

Después de consultar un archivo, se vuelve "irrelevante" para Prolog. Entonces, creo que, en general, la respuesta debería ser no . Pero SWI-Prolog tiene una gran cantidad de integrales que le permiten controlar su prolgram. Por ejemplo

?- [stackoverflow]. ?- predicate_property(P, file(''/home/carlo/prolog/stackoverflow.pl'')). P = yield(_G297, _G298) ; P = now _G297 ; P = x(_G297) ; ... ?- abolish(yield/2). true. ?- predicate_property(P, file(''/home/carlo/prolog/stackoverflow.pl'')). P = now _G297 ; P = x(_G297) ; ...

Tenga en cuenta que abolir no requiere que el nombre de archivo funcione, puede eliminar predicados cargados de otros archivos de fuentes.

clause , clause_property y erase deberían dar más control, pero me sale un error que no entiendo (no está documentado) cuando intento usar erase:

?- clause(strip_spaces(_G297, _G298),X,Y),erase(Y). ERROR: erase/1: No permission to clause erase `<clause>(0x29acc30)''

¿Existe un predicado incorporado o una forma sencilla de eliminar de la base de datos de conocimiento de prolog a los archivos fuente que ya se han consultado? Revisé el manual de referencia y no encontré nada que pudiera hacer eso.


si conoce el nombre del predicado, por ejemplo fact / 2, puede usar:

retractall(fact(_,_)).


Puede hacerlo con estos procedimientos que utilizan source_file/1 y source_file/2 :

unload_last_source:- findall(Source, source_file(Source), LSource), reverse(LSource, [Source|_]), unload_source(Source). unload_source(Source):- ground(Source), source_file(Pred, Source), functor(Pred, Functor, Arity), abolish(Functor/Arity), fail. unload_source(_).

unload_source/1 suprime todos los predicados definidos por el nombre del archivo de origen de entrada. Se advirtió que debe ser un camino absoluto.

unload_last_source/0 recuperará el último nombre de archivo consultado y lo descargará.