如何解决此表达式的类型为 'a -> 'a 数组数组,但预期表达式为 'b 数组类型
如何在 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
。您只提供了尺寸,但没有提供默认值。当你这样做时,你会得到一个函数,它接受默认值并返回一个数组数组。
其次,修改数组中的值时,使用<-
而不是=
。您想使用 arrayAux.(0).(j) = max_int
而不是 arrayAux.(0).(j) <- max_int
。
第三,在 dynamic
函数的末尾,您使用 !
运算符取消引用 arrayAux
。问题在于 arrayAux
不是引用。由于类型不匹配,这将导致编译器错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。