如何在 Ocaml 中正确操作矩阵? 当为矩阵上的位置分配值时,我错过了什么?
let dynamic arraymoedas valor len =
let arrayAux = Array.make_matrix (len+1) (len+1) in
for i=0 to len+1 do
arrayAux.(i).(0)=0;
done;
for j=0 to valor+1 do
arrayAux.(0).(j)= max_int
done;
for i=1 to len+1 do
for j=1 to len+1 do
if(arraymoedas.(i-j) > j) then
arrayAux.(i).(j) = arrayAux.(i - 1).(j)
else
arrayAux.(i).(j) = min (1+arrayAux.(i).(j-arraymoedas.(i - 1))) arrayAux.(i-1).(j)
done;
done;
!arrayAux
错误:
File "Novo_func.ml", line 38, characters 8-16:
38 | arrayAux.(i)(0)=0;
^^^^^^^^
Error: This expression has type 'a -> 'a array array
but an expression was expected of type 'b array
正如评论中所指出的,您编写的代码存在三个问题。
Array.make_matrix
。该函数的类型为int -> int -> 'a -> 'a array array
。您只提供了尺寸,但没有提供默认值。当你这样做时,你会得到一个接受默认值并返回一个数组的函数。
# Array.make_matrix 2 3;;
- : '_weak1 -> `_weak1 array array = <fun>
这也会带来值限制的问题。
其次,修改数组中的值时,使用
<-
而不是 =
。您想使用 arrayAux.(0).(j) = max_int
而不是 arrayAux.(0).(j) <- max_int
。
第三,在
dynamic
函数末尾,您使用 !
运算符来解引用 arrayAux
。问题在于 arrayAux
不是参考。这将由于类型不匹配而导致编译器错误。