- let aux_sep _ = KP.fprintf och "%s" ")" in
- 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_pars och p =
+ if p > 0 then begin KP.fprintf och "%s" ")"; out_pars och (pred p) end
+ in
+ let rec out_list chunk pars first items uris = match first, items, uris with
+ | true, _, _ ->
+ let dir, name = mk_name chunk in
+ let soch = append_out (KF.concat dir name ^ ext_tj) in
+ out_clause soch (KP.sprintf "g+line R C T :- line+%02u R C T, !." chunk);
+ KP.fprintf soch "g+list %u\n" chunk;
+ sub_och := soch;
+ out_list (succ chunk) pars false items uris
+ | false, _, [] ->
+ KP.fprintf !sub_och "gtop%a.\n\n" out_pars pars;
+ sub_close ()
+ | false, 0, _ ->
+ KP.fprintf !sub_och "(genv %u)%a.\n\n" chunk out_pars pars;
+ sub_close ();
+ out_list chunk 0 true size uris
+ | false, _, hd :: tl ->
+ out_name !sub_och hd; out_list chunk (succ pars) false (pred items) tl
+ in
+ let rec out_accumulate c =
+ if !chunk < c then KP.fprintf och "\n" else begin
+ let _, name = mk_name c in
+ KP.fprintf och "accumulate %s.\n" name;
+ out_accumulate (succ c)
+ end
+ in
+ sub_close ();
+ out_list 1 0 true size (List.rev !uris);
+ KP.fprintf och "accumulate helena.\n";
+ out_accumulate 1;