[ 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