修改ocaml中的矩阵

时间:2015-06-16 05:29:28

标签: matrix ocaml

我想编写一个修改矩阵内每个元素的函数。 但是在编译时我遇到了一些问题。

  

警告10:此表达式应具有类型单位。

我认为因为ocaml中的所有函数都需要返回一个值或单位,所以如果我在一个函数中实现两个任务,那是不可接受的。 请帮我修理一下。

let nomalize_matrix d a x = 
 for i = 1 to d do 
      for j = 1 to d do
          let n = i*j in
          x.(i)(j) = sprintf "%s_%d" a n
      done
  done;
x;;

2 个答案:

答案 0 :(得分:4)

在表达式中,OCaml中的=运算符是一个测试相等性的比较运算符。要分配给数组,请使用<-运算符。

编译器抱怨,因为您的表达式具有类型bool(即比较结果)。 for中的表达式应该具有类型unit,因为它的返回值被忽略。实际上,<-运算符返回单位值()

要访问二维数组的元素,语法如下:x.(i).(j)。请注意代码中没有的额外点。

在函数中执行两项操作通常没有问题。如果第一个表达式为;,则可以使用unit分隔两个表达式。结果是第二个表达式的值。你的代码在这方面没问题。

答案 1 :(得分:0)

小心不要使用运算符&#34; =&#34;当您从数组中设置一个项目并使用运算符&#34;&lt; - &#34;相反,在你的代码中,你有这个:

let nomalize_matrix d a x = 
 for i = 1 to d do 
      for j = 1 to d do
          let n = i*j in
          x.(i)(j) <- sprintf "%s_%d" a n
      done
  done;
x;;