main :- read_input_list(L), collect_unloaded_hosts(Hosts), add_workers(Ids, Hosts), process_list(L), halt. process_list([]). process_list([H|T]) :- process(H) & process_list(T). add_workers([Id|Ids],[Host|Hosts]) :- add_worker(Id,Host), add_workers(Ids,Hosts). add_workers([],[]).
process_list([]). process_list([H|T]) :- ( H < 5 -> process_list(T), process(H) ; process(H) & process_list(T) ).
(CIAO parallelizing preprocessor: automatic parallelization and granularity control)
seq :- move(red), move(green). par :- move(red) & move(green). con :- move(red) &, move(green). thr :- move(red) &&, move(green). syn :- sync_move(red, [ok|X]) &&, sync_move(green, X). move(X) :- create(X,H), move(100, H), destroy(H). move(0, _) :- !. move(N, H) :- N > 0, move_step(H), N1 is N-1, move(N1, H). sync_move(X, L) :- create(X,H), sync_move(100, H, L), destroy(H). sync_move(0, _, _) :- !. sync_move(N, H, L) :- N > 0, ask(L = [ok|R]), move_step(H), R = [ok|S], N1 is N-1, sync_move(N1, H, S).