This section describes directives which manipulate attributes of predicate definitions. The functors dynamic/1, multifile/1 and discontiguous/1 are operators of priority 1150 (see op/3), which implies the list of predicates they involve can just be a comma separated list:
:- dynamic foo/0, baz/2.
On SWI-Prolog all these directives are just predicates. This implies they can also be called by a program. Do not rely on this feature if you want to maintain portability to other Prolog implementations.
Due to the representation technique used at most 4 arguments can be indexed. All indexed arguments should be in the first 32 arguments of the predicate. If more than 4 arguments are specified for indexing only the first 4 will be accepted. Arguments above 32 are ignored for indexing.
By default all predicates with are indexed on their
first argument. It is possible to redefine indexing on predicates that
already have clauses attached to them. This will initiate a scan
through the predicate's clause list to update the index summary
information stored with each clause.
If --for example-- one wants to represents sub-types using a fact list `sub_type(Sub, Super)' that should be used both to determine sub- and super types one should declare sub_type/2 as follows:
:- index(sub_type(1, 1)). sub_type(horse, animal). ... ...