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

## See Also

between / 4, parallel / 1, repeat / 0, get_flag / 2