Importing Dynamic Predicates

Imported dynamic predicates may be asserted and retracted. For example, suppose the following file is loaded via use_module/1:

     :- module(m1, [f/1]).
     :- dynamic f/1.
     f(0).
     

Then f/1 can be manipulated as if it were defined in the current module. For example,

     | ?- clause(f(X), true).
     
     X = 0
     

The built-in predicate listing/1 distinguishes predicates that are imported into the current source module by prefixing each clause with the module name. Thus,

     | ?- listing(f).
     
     m1:f(0).
     

However, listing/1 does not prefix clauses with their module if they are defined in the source module itself. Note that

     | ?- listing.
     

can be used to see all the dynamic predicates defined in or imported into the current type-in module. And

     | ?- listing(m1:_).
     

can be used to see all such predicates that are defined in or imported into module m1.