我在 OCaml 中操作二维数组。我有一些问题:
如何声明一个长度为类型int64而不是类型的数组int?例如,Array.make : int -> 'a -> 'a array如果我需要一个索引类型为 的更大数组int64怎么办?
我可以写如下内容吗:
let array = Array.make_matrix 10 10 0 in array.(1).(2) <- 5; 数组。(3).(4) <- 20; (* where I modify a part of values in array) f array ... ... 上面的代码在我看来不自然,因为我们修改了array里面的值let,是不是非得这样,或者有没有更自然的方法去做这个?
有人可以帮忙吗?非常感谢!
在 64 位系统上,来自 Array 模块的 OCaml 数组的大小限制为 2^54 - 1,而在 32 位系统上限制为 4,194,303。对于浮点数组,限制要小 2 倍。在这两种情况下,索引都可以轻松表示为 int,因此使用 int64 作为索引没有任何优势。
用于32位系统中的数值是这样一些问题太小,所以存在一个名为Bigarray另一个模块可以表示更大的阵列。它支持更大的数组,但索引仍然是整数。如果您确实需要拥有大型索引,那么您可能在 64 位系统上,这不是这样的限制。如果没有,我想无论如何你都会用完地址空间。也许你真正想要的是一个哈希表?
我不确定你在说什么“让”。let 的目的是为某物命名。在开始将值存储到数组中之前,给它一个名称并不是不合理的。如果要在创建数组时定义值,可以使用 Array.init 并编写任意函数来设置数组值。
OCaml 中的数组代码本质上是命令式的,因此您通常会得到具有这种外观的代码。我经常使用begin并且end只是拥抱它的 Algolic 质量。