首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ocaml中遇到矩阵的问题

在ocaml中遇到矩阵的问题
EN

Stack Overflow用户
提问于 2020-04-11 19:54:50
回答 1查看 60关注 0票数 0

所以我最近刚开始为我的大学用ocaml编程(这里是必需的)。我必须编写一个函数unit->(int*int) Array,它创建一个16x16的矩阵,其中的条目是接受4个元组的数组。

我被明确地告知不要递归地编写这个函数,所以我做了这样的事情:

代码语言:javascript
运行
复制
let matrice_deplacements () = 
  let u = Array.make 16 (Array.make 16 [||]) in
  for k=0 to 15 do
    for p=0 to 15 do
      u.(k).(p)<-deplacement_grille (k,p)
    done;
  done;
u;;

而且我确信函数deplacement_grille (请原谅法语)工作得很好,并且给出了我想要的(这是正确的(int*int)数组,对于好的k和p)

我完全不知道问题出在哪里,因为每次我运行这段代码(我尝试了2*2和3*3矩阵,它都不起作用),ocaml返回一个矩阵,其中所有行都是相同的(它们实际上应该是最后一行)。

任何帮助都是非常感谢的。实际上我想知道这是否归结于ocaml存储数组的方式,它可能像python一样,它们有相同的地址。

EN

回答 1

Stack Overflow用户

发布于 2020-04-11 20:05:38

我建议参考documentation of Array.make,它解释了以这种方式构造的数组具有物理上相等的元素。因此,您的初始代码行构建了2个不同的数组,而不是您期望的17个。(必须如此,因为在将内部构造函数应用程序(Array.make 16 [||])传递给外部数组的构造函数之前,它的计算结果是单个数组。)

您可能需要Array.init,它为每个索引构造一个新的元素。还有Array.make_matrix,它类似于Array.make,因为矩阵元素最初在物理上是相等的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61156369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档