Is there a built-in predicate or a easy way to remove from the knowledge database of prolog a source files that has already been consulted? I've gone through the reference manual and didn't find any thing that could do that.
You can do it with these procedures which use source_file/1
and 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
abolishes all predicates defined by the input Source file name. Be warned that it needs to be an absolute path.
unload_last_source/0
will retrieve the last consulted file name and unload it.