这是我计算的等价类的函数是一组完全等价的元素。而是迭代迭代矩阵列中的所有条目;计算具有关系自反性的等价类并检查两个方向
let eq_class m i =
let column = m.(i)
and set = ref [] in
Array.iteri begin fun j l ->
if j = i || column.(j) && m.(j).(i) then
set := j :: !set else ignore l
end column;
!set;;
请你帮我解释l
,我必须使用ignore
来传递编译器。如何在不使用l
的情况下在ignore
正确编写此函数?
答案 0 :(得分:8)
您可以将ignore l
替换为()
:它具有相同的类型并执行相同的操作(无)。
else
分支中的表达式应与then
分支中的表达式具有相同的类型,then
分支中的表达式类型为unit
此外,if condition then expression else ()
还有一个缩短的便利构造。较短的等效构造是if condition then expression
,您可以在程序中使用它:
let eq_class m i =
let column = m.(i)
and set = ref [] in
Array.iteri begin fun j l ->
if j = i || column.(j) && m.(j).(i) then
set := j :: !set
end column;
!set;;