An example
of an object is given in the following declaration.
.ds ctr.pl
The use of such a counter is illustrated by the goal
:-
O = new(ctr()),
O!inc(),
O!value(X).
where a counter is created, which is subsequently asked
to answer the method calls inc() and value(X).
The constructor of the counter states that the object is
prepared to answer any call, indefinitly.
Evaluating the goal results in the creation of
a new instance of the declared object.
\nop{
Below we have depicted how multiple processes
refer to a single object.
.so exec
}
For each method call a seperate process is created, evaluating
the call.
A process keep track of the evaluation history
of a goal.
In case backtracking occurs, after a first answer has been
delivered, the process continues to generate answer substitutions.
The object is free to accept other method calls
after having delivered the first answer substitution
or failure.
The process that continues evaluating the goal to find
alternative answers runs then concurrently
with other processes created for evaluating a method call.