dynamic - 此表达式的类型为 '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
函数结束时,您正在使用!
运算符 deref arrayAux
。问题在于这arrayAux
不是参考。由于类型不匹配,这将导致编译器错误。
推荐阅读
- angularjs - AngularJs 更新不正确的值
- php - 我们如何使用 mosquitto 从 web 服务器使用 php 向 android 用户发送推送通知?
- twitter - 如何根据推文包含的图像 url 获取推文 ID?
- wildfly - 如何在wildfly服务器中以编程方式热重载静态资源(如xhtml)以获取爆炸战争中存在的库
- python - 脚本中的交互式 python 变量
- javascript - 解析 JSON 时获取“未定义”对象
- sql - postgres json插入的原始参数化字符串
- sql - 是否可以使用 array_agg 导致不嵌套?| PostgreSQL
- firebase - 使用 Firebase CLI 更新实时数据库中集合的每个节点中的项目
- angular - 当打开角度材质对话框时,如何设置其他元素可点击