Advertisement
Guest User

Untitled

a guest
Jul 19th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.17 KB | None | 0 0
  1. let join l sep = match l with
  2.   | [] -> ""
  3.   | h :: t ->
  4.     let s = List.fold_left (fun s e -> sprintf "%s%s%s" s sep e) "" t in
  5.     sprintf "%s%s%s" h sep s
  6.  
  7. let constraints_composante nodes =
  8.   let nodes_constraints = List.map (fun (s,t) ->
  9.     sprintf "%s >= %s" (pprint_term s) (pprint_term t)
  10.   ) nodes in
  11.   let nodes_constraints_strict = List.map (fun (s,t) ->
  12.     sprintf "%s > %s" (pprint_term s) (pprint_term t)
  13.   ) nodes in
  14.   let nodes_conjuct = join nodes_constraints " /\\ " in
  15.   let nodes_disjunct_strict = join nodes_constraints_strict " \\/ " in
  16.   let nodes_disjunct_strict = sprintf "(%s)" nodes_disjunct_strict in
  17.   let uts = RuleSet.elements (ut_composante nodes) in
  18.   let uts_constraints = List.map (fun (s,t) ->
  19.     sprintf "%s >= %s" (pprint_term s) (pprint_term t)
  20.   ) uts in
  21.   let uts_conjuct = join uts_constraints " /\\ " in
  22.   sprintf "(%s /\\\n%s /\\\n%s)" nodes_conjuct uts_conjuct nodes_disjunct_strict
  23.  
  24. let constraints g =
  25.   let components = C.scc_list g in
  26.   let components = List.map (List.map G.V.label) components in
  27.   let components_constraints = List.map constraints_composante components in
  28.   join components_constraints " /\\\n\n\n"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement