使用'ignore'来传递编译器

时间:2012-01-17 08:34:39

标签: ocaml

这是我计算的等价类的函数是一组完全等价的元素。而是迭代迭代矩阵列中的所有条目;计算具有关系自反性的等价类并检查两个方向

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正确编写此函数?

1 个答案:

答案 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;;