Node:Misc Pred, Previous:Profiling, Up:Built Intro



Miscellaneous

?X = ?Y [ISO]

Defined as if by the clause Z=Z.; i.e. X and Y are unified.

?X \= ?Y [ISO]

The same as \+ X = Y; i.e. X and Y are not unifiable.

unify_with_occurs_check(?X, ?Y) [ISO]

True if X and Y unify to a finite (acyclic) term. Runs in almost linear time.

length(?List,?Length)

If List is instantiated to a list of determinate length, then Length will be unified with this length.

If List is of indeterminate length and Length is instantiated to an integer, then List will be unified with a list of length Length. The list elements are unique variables.

If Length is unbound then Length will be unified with all possible lengths of List.

numbervars(?Term,+N,?M)

Unifies each of the variables in term Term with a special term, so that write(Term) (or writeq(Term)) (see Term I/O) prints those variables as (A + (i mod 26))(i/26) where i ranges from N to M-1. N must be instantiated to an integer. If it is 0 you get the variable names A, B, ..., Z, A1, B1, etc. This predicate is used by listing/[0,1] (see State Info).

undo(:Goal)

The goal Goal is executed on backtracking. This predicate is useful if Goal performs some side-effect which must be done on backtracking to undo another side-effect.

Note that this operation is immune to cuts. That is, undo/1 does not behave as if it were defined by:

weak_undo(_).
weak_undo(Goal) :- Goal, fail.

since defining it that way would not guarantee that Goal be executed on backtracking.

Note also that the Prolog top-level operates as a read-call-fail loop, and backtracks implicitly for each new query. Raised exceptions and the predicates halt/0 and abort/0 cause implicit backtracking as well.

halt [ISO]

Causes Prolog to exit back to the shell. (In recursive calls to Prolog from C, this predicate will return back to C instead.)

halt(+Code) [ISO]

Causes the Prolog process to immediately exit back to the shell with the integer return code Code, even if it occurs in a recursive call from C.

op(+Precedence,+Type,+Name) [ISO]

Declares the atom Name to be an operator of the stated Type and Precedence (see Operators). Name may also be a list of atoms in which case all of them are declared to be operators. If Precedence is 0 then the operator properties of Name (if any) are cancelled.

current_op(?Precedence,?Type,?Op) [ISO]

The atom Op is currently an operator of type Type and precedence Precedence. Neither Op nor the other arguments need be instantiated at the time of the call; i.e. this predicate can be used to generate as well as to test.

break

Invokes a recursive top-level. See Nested. (This predicate is not available in runtime systems.)

abort

Aborts the current execution. See Nested. (In recursive calls to Prolog from C, this predicate will return back to C instead.)

save_files(+SourceFiles, +File)

Any module declarations, predicates, multifile clauses, or directives encountered in SourceFiles are saved in object format into the file File. Source file information as provided by source_file/[1,2] for the relevant predicates and modules is also saved.

If File does not have an explicit suffix, the suffix .po will be appended to it. SourceFiles should denote a single file or a list of files. File can later be loaded by load_files/[1,2], at which time any saved directives will be re-executed. If any of the SourceFiles declares a module, File too will behave as a module-file and export the predicates listed in the first module declaration encountered in SourceFiles. See Saving.

save_modules(+Modules, +File)

The module declarations, predicates, multifile clauses and initializations belonging to Modules are saved in object format into the file File. Source file information and embedded directives (except initializations) are not saved.

If File does not have an explicit suffix, the suffix .po will be appended to it. Modules should denote a single module or a list of modules. File can later be loaded by load_files/[1,2] and will behave as a module-file and export any predicates exported by the first module in Modules. See Saving.

save_predicates(:Spec, +File)

The predicates specified by the generalized predicate spec Spec are saved in object format into the file File. Source file information and embedded directives are not saved. Thus, this predicate is intended for saving data represented as tables of dynamic facts, not for saving static code.

If File does not have an explicit suffix, the suffix .po will be appended to it. File can later be loaded by load_files/[1,2]. See Saving.

save_program(+File)
save_program(+File, :Goal)

The system saves the program state into file File. When the program state is restored, Goal is executed. Goal defaults to true. See Saving.

restore(+File)

The system is returned to the program state previously saved to file File with start-up goal Goal. restore/1 may succeed, fail or raise an exception depending on Goal. See Saving.

garbage_collect

Performs a garbage collection of the global stack immediately.

garbage_collect_atoms

Performs a garbage collection of the atoms immediately.

gc

Enables garbage collection of the global stack (the default).

nogc

Disables garbage collection of the global stack.

prompt(?Old,?New)

The sequence of characters (prompt) which indicates that the system is waiting for user input is represented as an atom, and unified with Old; the atom bound to New specifies the new prompt. In particular, the goal prompt(X, X) unifies the current prompt with X, without changing it. Note that this predicate only affects the prompt given when a user's program is trying to read from the standard input stream (e.g. by calling read/1). Note also that the prompt is reset to the default |: on return to top-level.

version

Displays the introductory messages for all the component parts of the current system.

Prolog will display its own introductory message when initially run and on reinitialization by calling version/0. If this message is required at some other time it can be obtained using this predicate which displays a list of introductory messages; initially this list comprises only one message (Prolog's), but you can add more messages using version/1. (This predicate is not available in runtime systems.)

version(+Message)

Appends Message to the end of the message list which is output by version/0. Message must be an atom. (This predicate is not available in runtime systems.)

The idea of this message list is that, as systems are constructed on top of other systems, each can add its own identification to the message list. Thus version/0 should always indicate which modules make up a particular package. It is not possible to remove messages from the list.

help [Hookable]

Displays basic information, or a user defined help message. It first calls user:user_help/0, and only if that call fails is a default help message printed on the current output stream. (This predicate is not available in runtime systems.)

user_help [Hook]
user:user_help

This may be defined by the user to print a help message on the current output stream.