[ 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

• fork(+, -) is nondet

### 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.

```