Stable marriage problem: Difference between revisions

m
m (→‎{{header|OCaml}}: leave a TODO message)
Line 507:
 
 
let stable_matching_stable_matching ~menms ~womenws =
let rec aux ms ws =
match free_men ms with (*TODO free men who still has some w to propose to *)
Line 532:
end
in
let ms, ws = build_structs ~men ~women in
aux ms ws
 
 
let stable_matching ~men ~women =
let ms, ws = build_structs ~men ~women in
let _, ws = _stable_matching ms ws in
let some = function Some v -> v | None -> "" in
let engagements = List.map (fun w -> w.w_name, some w.engaged) ws in
(engagements)
 
 
Line 569 ⟶ 576:
Array.to_list eng
 
 
let print engs =
List.iter (fun (w,m) ->
Printf.printf " %4s is engaged with %s\n" w m) engs;
Printf.printf "# Engagements %s stable\n"
(if is_stable ~men ~women engs then "are" else "are not")
 
let () =
let _, wsengagements = stable_matching ~men ~women in
let some = function Some v -> v | None -> "" in
let engagements = List.map (fun w -> w.w_name, some w.engaged) ws in
 
let print engs =
List.iter (fun (w,m) ->
Printf.printf " %4s is engaged with %s\n" w m) engs;
Printf.printf "# Engagements %s stable\n"
(if is_stable ~men ~women engs then "are" else "are not")
in
print engagements;
print_endline "========================";