maybe let eq_class tc trans : 'a list list = let ans = (* create result matrix here *) in 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 ans.(i).(j) <- ... else .... done done; to_list ans ;; If I have understanded correctly..... --------------- Kakadu On Mon, Oct 31, 2011 at 7:36 PM, Ly Kim Quyen wrote: > Dear group, > > I have an question about data structure and types. I have a function calculates > transitive closure of relation represented as an adjacency matrix > > 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 >