The recursion embedded in this procedure is rather strange. The complete procedure performs the base case, returning the empty list, and the expire procedure performs the recursion. Each computation is assumed to produce exactly one value. Since the amount of fuel supplied each time, one tick, is constant, the effect of round-robin is to return a list of the values sorted from the quickest to complete to the slowest to complete. Thus, when we call round-robin on a list of engines, each computing one of the Fibonacci numbers, the output list is sorted with the earlier Fibonacci numbers first, regardless of the order of the input list.
More interesting things can happen if the amount of fuel varies each time through the loop.
In this case, the computation would be nondeterministic, i.e., the results would vary from call to call. Also, although first-true passes a fixed amount of fuel to each engine, it chooses the next engine to run at random, and is thus nondeterministic. The list of engines is maintained with pick , which randomly chooses an element of the list, and remq , which removes the chosen engine from the list. Since por is nondeterministic, subsequent uses with the same expressions may not return the same values. Its arguments are passed to the complete procedure along with the number of ticks remaining.