- if !G.first > 0 then begin
- let s = KP.sprintf "tv+c C T :- $lt C c+%u, !." !G.first in
- out_clause och s;
- out_clause och "tv+c C T :- tv+ T."
- end;
+ let rec out_list och chunk first items uris = match first, items, uris with
+ | true, _, _ ->
+ KP.fprintf och "chunk %u :-\n" chunk;
+ out_list och (succ chunk) false items uris
+ | false, _, [] -> KP.fprintf och "!.\n\n"; chunk
+ | false, 0, _ ->
+ KP.fprintf och "!.\n\n";
+ out_list och chunk true size uris
+ | false, _, hd :: tl ->
+ out_name hd; out_list och chunk false (pred items) tl
+ in
+ let rec out_chunks och chunks c =
+ if chunks < c then out_clause och "!." else begin
+ KP.fprintf och "chunk %u,\n" c; out_chunks och chunks (succ c)
+ end
+ in
+ let chunks = out_list och 1 true size (List.rev !uris) in