我想编写一个修改矩阵内每个元素的函数。 但是在编译时我遇到了一些问题。
警告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;;
答案 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;;