修改ocaml中的矩阵

Modify a matrix in ocaml

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

Warning 10: this expression should have type unit.

我认为因为ocaml中的所有函数都需要return到一个值或单位,所以如果我在一个函数中实现两个任务,这是不可接受的。 请帮我解决它。

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

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

编译器报错,因为您的表达式的类型为 bool(即比较的结果)。 for 中的表达式应该具有类型 unit 因为它的 return 值被忽略了。事实上,<- 运算符 returns (),单位值。

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

在一个函数中做两件事,一般来说是没有问题的。如果第一个表达式的类型为 unit,则可以用 ; 分隔两个表达式。结果是第二个表达式的值。您的代码在这方面没问题。

当您设置数组中的一项并使用运算符“<-”时,请注意不要使用运算符“=”,因此在您的代码中,您有这样的代码:

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