[ Control | Reference Manual | Alphabetic Index ]
fork(+Max, -I)
Succeeds for all integers I between 1 and Max. The solutions are generated
in parallel.
- Max
- Integer
- I
- Variable or Integer
Description
Generates in parallel the integers between 1 and a given maximum Max.
The order of solutions is unspecified. For every value of Max, this
predicate behaves as if defined by
:- parallel fork/2.
fork(Max, Max).
...
fork(Max, 2).
fork(Max, 1).
Operationally, the advantage of fork/2 compared to a recursive
definition like
:- parallel bfork/2.
bfork(Max, Max).
bfork(Max, I) :- Max>1, Max1 is Max-1, bfork(Max1, I).
is that fork/2 creates only a single wide choice point instead of Max
binary ones. This improves efficiency, especially for parallel
execution.
Modes and Determinism
Fail Conditions
Fails if Max is less than 1
Exceptions
- (4) instantiation fault
- Max is not instantiated.
- (5) type error
- Max is not an integer.
Examples
% peclipse -w 3
[eclipse 1]: fork(5,X), get_flag(worker, W).
X = 5
W = 1 More? (;)
X = 3
W = 3 More? (;)
X = 4
W = 2 More? (;)
X = 2
W = 1 More? (;)
X = 1
W = 3 More? (;)
no (more) solution.
See Also
between / 4, parallel / 1, repeat / 0, get_flag / 2