gpt4 book ai didi

arrays - OCaml 中的数组操作

转载 作者:行者123 更新时间:2023-12-04 00:47:21 28 4
gpt4 key购买 nike

我在 OCaml 中操作二维数组。我有一些问题:

  1. 如何声明长度为int64 类型的数组,而不是int?例如,Array.make : int -> 'a -> 'a array,如果我需要一个索引类型为 int64 的更大的数组怎么办?

  2. 我可以这样写吗:

    让数组 = Array.make_matrix 10 10 0 in数组.(1).(2) <- 5;数组.(3).(4) <- 20; (* 我修改了数组中的一部分值)f 数组 ......上面的代码在我看来不自然,因为我们在 let 中修改了 array 的值,我必须这样做,还是有更自然的方法来做到这一点?

有人能帮忙吗?非常感谢!

最佳答案

在 64 位系统上,来自 Array 模块的 OCaml 数组的大小限制为 2^54 - 1,而在 32 位系统上,限制为 4,194,303。对于 float 组,限制要小 2 倍。在这两种情况下,索引都可以很容易地表示为 int,因此使用 int64 作为索引没有任何优势。

对于某些问题,32 位系统的值方式太小了,因此有另一个名为 Bigarray 的模块可以表示更大的数组。它支持更大的数组,但索引仍然是整数。如果你真的需要大索引,你可能在 64 位系统上,这不是一个限制。如果没有,我想无论如何你都会用完地址空间。也许您真正想要的是哈希表?

我不确定您所说的“让”是什么意思。 let 的目的是给某物起一个名字。在开始将值存储到数组之前给数组命名并不是不合理的。如果您想在创建数组时定义值,您可以使用 Array.init 并编写任意函数来设置数组值。

OCaml 中的数组代码本质上是命令式的,因此您通常会得到具有这种外观的代码。我经常使用 beginend 并接受它的 Algolic 品质。

关于arrays - OCaml 中的数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6557752/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com