[ 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