
fork(+Max, -I)

   Succeeds for all integers I between 1 and Max.  The solutions are generated
in parallel.



Arguments
   Max                 Integer
   I                   Variable or Integer

Type
   Control

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 --- Max is not instantiated.
     5 --- 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
