let trans_closure (m: 'a array array) : 'a array array =
let last_cols = length m - 1 in
for k = 0 to last_cols do
for i = 0 to last_cols do
for j = 0 to last_cols do
m.(i).(j) <- m.(i).(j) || (m.(i).(k) && m.(k).(j))
done;
done;
done;
m
;;
(* transpose matrix A is the matrix A' formed by turning rows into
columns and vice versa: (A')i,j = Aj,i.*)
let transpose (m: 'a array array) : 'a array array =
let tc = trans_closure m in
let last_cols = length m - 1 in
for i = 0 to last_cols do
for j = 0 to last_cols do
tc.(j).(i) <- tc.(i).(j)
done;
done;
tc
;;
I would like to compute equivalence classes, it is disjoint between matrix transitive closure and matrix transpose. I would like it returns for me a new list with the type: list of list [[]]
I have a function convert 'a array array to 'a list list
let to_list (m : 'a array array) : 'a list list =
List.map to_list (to_list m)
let eq_class (m: 'a array array) : 'a list list =
let lst = length m - 1 in
for i = 0 to lst do
for j = 0 to lst do
let a = tc.(i).(j) && trans.(i).(j) in
if a
then
???
I'm stuck here, I don't know how I can add the result "a" into the new list of list. I think I should create a new list with type 'a list list, but I don't know where I should write it?
Thank you for helping me understand and give me some advises.
Best regards,
Gwen