4.4.3 Selective Saving and Loading of PO Files

The save_program/[1,2] and restore/1 predicates discussed in the previous section are used for saving and restoring the entire Prolog database. To save selected parts of a Prolog database, the predicates save_files/2, save_modules/2, and save_predicates/2 are used.

To save everything that was loaded from the files src1.pl and src2.pl into file1.po (extensions optional), you would use:

     | ?- save_files([src1,src2],file1).

Any module declarations, predicates, multifile clauses, or directives encountered in those files will be saved. Source file information as provided by source_file/[1,2] for the relevant predicates and modules is also saved.

To save the modules user and special into file2.po you would use:

     | ?- save_modules([user,special],file2).

The module declarations, predicates, multifile clauses and initializations belonging to those modules will be saved. Source file information and embedded directives (except initializations) are not saved.

To just save certain predicates into file3.po you would use:

     | ?- save_predicates([person/2,dept/4],file3).

This will only save the predicates specified. When the PO file is loaded the predicates will be loaded into the same module they were in originally.

Any PO file, however generated, can be loaded into Prolog with load_files/[1,2]:

     | ?- load_files(file1).

or, equivalently:

     | ?- [file1].

The information from each PO file loaded is incrementally added to the database. This means that definitions from later loads may replace definitions from previous loads.

The predicates load_files/[1,2] are used for compiling and loading source files as well as PO files. If file1.po and file1.pl both exist (and file1 does not), load_files(file1) will load the source (‘.pl’) or the PO, whichever is the most recent.

While loading clauses from a PO file, if clauses for an existing multifile predicate are encountered, but in a precompiled format different from the existing clauses, the existing clauses remain untouched, the multifile clauses from the PO file are simply ignored, the load continues, and a permission error is raised at the end of the operation.

Refer to ref-lod for more information on loading programs, and also to the reference page for load_files/[1,2].


Send feedback on this subject.