To tune the initialization of a file or system to be run only when it
should be run, volatile/1, in combination with other declarations,
give initialization/1 the information
necessary to distinguish different loading situations. In the reference
pages, we show how some common situations can be programmed using
these predicates.
If a source file contains data that is supposed
to be transformed according to some complicated rules (which cannot be
done with term_expansion/2), and the data after the transformation can
be saved into a saved state, we might want the transformation to be
done when the file is loaded, but not when a saved state is restored.
The following program defines the initialization to be run only when
the file is loaded:
:- dynamic do_not_transform/0. % reset fact
:- initialization my_init.
my_init :-
( do_not_transform ->
true
; undo_transform, % remove old data
do_transform,
assert(do_not_transform)
).
In the above example, do_transform/0 and undo_transform/0 are user defined.