D Glossary of Terms

anonymous [variable]
The variable _ is called the anonymous variable. Multiple occurrences of _ in a single term are not shared.
Arguments are terms that appear in a compound term. A1 and a2 are the first and second argument of the term myterm(A1, a2).
Argument count (is number of arguments) of a compound term.
Add a clause to a predicate. Clauses can be added at either end of the clause-list of a predicate. See assert/1 and assertz/1.
Textual constant. Used as name for compound terms, to represent constants or text.
Searching process used by Prolog. If a predicate offers multiple clauses to solve a goal, they are tried one-by-one until one succeeds. If a subsequent part of the proof is not satisfied with the resulting variable binding, it may ask for an alternative solution (= binding of the variables), causing Prolog to reject the previously chosen clause and try the next one.
binding [of a variable]
Current value of the variable. See also backtracking and query.
built-in [predicate]
Predicate that is part of the Prolog system. Built in predicates cannot be redefined by the user, unless this is overruled using redefine_system_predicate/1.
Part of a clause behind the neck operator (:-).
`Sentence' of a Prolog program. A clause consists of a head and body separated by the neck operator (:-) or it is a fact. For example:
parent(X) :-
        father(X, _).

Expressed ``X is a parent if X is a father of someone''. See also variable and predicate.

Process where a Prolog program is translated to a sequence of instructions. See also interpreted. SWI-Prolog always compiles your program before executing it.
compound [term]
Also called structure. It consists of a name followed by N arguments, each of which are terms. N is called the arity of the term.
context module
If a term is referring to a predicate in a module, the context module is used to find the target module. The context module of a goal is the module in which the predicate is defined, unless this predicate is module transparent, in which case the context module is inherited from the parent goal. See also module_transparent/1.
dynamic [predicate]
A dynamic predicate is a predicate to which clauses may be asserted and from which clauses may be retracted while the program is running. See also update view.
exported [predicate]
A predicate is said to be exported from a module if it appears in the public list. This implies that the predicate can be imported into another module to make it visible there. See also use_module/[1,2].
Clause without a body. This is called a fact because interpreted as logic, there is no condition to be satisfied. The example below states john is a person.
A goal is said to haved failed if it could not be proven.
Computers crippled representation of a real number. Represented as `IEEE double'.
Computer code expressed in other languages than Prolog. SWI-Prolog can only cooperate directly with the C and C++ computer languages.
Combination of name and arity of a compound term. The term foo(a, b, c) is said to be a term belonging to the functor foo/3 . foo/0 is used to refer to the atom foo.
Question stated to the Prolog engine. A goal is either an atom or a compound term. A goal succeeds, in which case the variables in the compound terms have a binding or fails if Prolog fails to prove the goal.
Indexing technique used for quick lookup.
Part of a clause before the neck instruction. This is an atom or compound term.
imported [predicate]
A predicate is said to be imported into a module if it is defined in another module and made available in this module. See also chapter 5.
Indexing is a technique used to quickly select candidate clauses of a predicate for a specific goal. In most Prolog systems, including SWI-Prolog, indexing is done on the first argument of the head. If this argument is instantiated to an atom, integer, float or compound term with functor, hashing is used quickly select all clauses of which the first argument may unify with the first argument of the goal.
Whole number. On all implementations of SWI-Prolog integers are at least 64-bit signed values. When linked to the GNU GMP library, integer arithmetic is unbounded. See also current_prolog_flag/2, flags bounded, max_integer and min_integer.
As opposed to compiled, interpreted means the Prolog system attempts to prove a goal by directly reading the clauses rather than executing instructions from an (abstract) instruction set that is not or only indirectly related to Prolog.
A predicate that reasons about other predicates, either by calling them, (re)defining them or querying properties.
Collection of predicates. Each module defines a name-space for predicates. built-in predicates are accessible from all modules. Predicates can be published (exported) and imported to make their definition available to other modules.
module transparent [predicate]
A predicate that does not change the context module. Sometimes also called a meta-predicate.
multifile [predicate]
Predicate for which the definition is distributed over multiple source-files. See multifile/1.
Operator (:-) separating head from body in a clause.
Symbol (atom) that may be placed before its operand (prefix), after its operand (postfix) or between its two operands (infix).

In Prolog, the expression a+b is exactly the same as the canonical term +(a,b).

Argument of an operator.
The priority of an operator. Operator precedence is used to interpret a+b*c as +(a, *(b,c)).
Collection of clauses with the same functor (name/arity). If a goal is proved, the system looks for a predicate with the same functor, then used indexing to select candidate clauses and then tries these clauses one-by-one. See also backtracking.
predicate indicator
Term of the form Name/Arity (traditional) or Name//Arity (ISO DCG proposal) where Name is an atom an Arity a non-negative integer. It acts as an indicator (or reference) to a predicate or DCG rule.
In the context of operators a synonym for precedence.
Collection of predicates.
Attribute of an object. SWI-Prolog defines various *_property predicates to query the status of predicates, clauses. etc.
Process where Prolog attempts to prove a query using the available predicates.
public list
List of predicates exported from a module.
See goal.
Remove a clause from a predicate. See also dynamic, update view and assert.
Two variables are called shared after they are unified. This implies if either of them is bound, the other is bound to the same value:
?- A = B, A = a.

A = a,
B = a
singleton [variable]
Variable appearing only one time in a clause. SWI-Prolog normally warns for this to avoid you making spelling mistakes. If a variable appears on purpose only once in a clause, write it as _ (see anonymous). Rules for naming a variable and avoiding a warning are given in section
Bindings resulting from a successfully proven goal.
Synonym for compound term.
Used for the following representations of text: a packed array (see section 4.23), SWI-Prolog specific), a list of character codes or a list of one-character atoms.
A goal is said to have succeeded if it has been proven.
Value in Prolog. A term is either a variable, atom, integer, float or compound term. In addition, SWI-Prolog also defines the type string
See module transparent.
Prolog process to make two terms equal by assigning variables in one term to values at the corresponding location of the other term. For example:
?- foo(a, B) = foo(A, b).

A = a,
B = b

Unlike assignment (which does not exist in Prolog), unification is not directed.

update view
How Prolog behaves when a dynamic predicate is changed while it is running. There are two models. In most older Prolog systems the change becomes immediately visible to the goal, in modern systems including SWI-Prolog, the running goal is not affected. Only new goals `see' the new definition.
A Prolog variable is a value that `is not yet bound'. After binding a variable, it cannot be modified. Backtracking to a point in the execution before the variable was bound will turn it back into a variable:
?- A = b, A = c.
?- (A = b; true; A = c).
A = b ;
A = _G283 ;
A = c ;

See also unify.