Stable marriage problem: Difference between revisions

Content added Content deleted
m (→‎{{header|OCaml}}: leave a TODO message)
Line 507: Line 507:




let stable_matching ~men ~women =
let _stable_matching ms ws =
let rec aux ms ws =
let rec aux ms ws =
match free_men ms with (*TODO free men who still has some w to propose to *)
match free_men ms with (*TODO free men who still has some w to propose to *)
Line 532: Line 532:
end
end
in
in
let ms, ws = build_structs ~men ~women in
aux ms ws
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: Line 576:
Array.to_list eng
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 () =
let _, ws = stable_matching ~men ~women in
let engagements = 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 engagements;
print_endline "========================";
print_endline "========================";