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