gpt4 book ai didi

arrays - OCaml 中的 a.{X} 是什么意思?

转载 作者:行者123 更新时间:2023-12-04 14:18:15 25 4
gpt4 key购买 nike

我目前正在尝试将一些 OCaml 移植到 F#。我在 OCaml 中处于“深渊”,而我的 F# 有点生疏。

无论如何,OCaml 代码在 OCaml 编译器中构建得很好,但是(并不奇怪)即使打开了 ML 兼容性,也会在 F# 编译器中产生大量错误。一些错误看起来是保留字,但大部分错误都在提示 .{在诸如以下行中:

 m.(a).(b) <- w.{a + b * c};

a,b,c 是整数。

我已经通过 OCaml 网站、Stackoverflow、法语 O'Reilly 书的英文翻译等进行了大量搜索,但找不到这样的东西。当然,大多数搜索工具都存在标点符号问题,这无济于事!是的,我找到了对 . 的引用用于指代记录成员,以及 { }被用来定义记录,但两者都在一起?从用法来看,我认为它是某种关联或稀疏数组?

这个语法是什么意思?最接近的 F# 等价物是什么?

最佳答案

这里有 oCaml 文档/手册的 pdf 格式:

http://caml.inria.fr/distrib/ocaml-3.12/ocaml-3.12-refman.pdf

在第 496 页(朝向页面底部),它提到了通用数组及其 get 方法:

val get : (’a, ’b, ’c) t -> int array -> ’a

Read an element of a generic big array. Genarray.get a [|i1; ...; iN|] returns the element of a whose coordinates are i1 in the first dimension, i2 in the second dimension, . . ., iN in the N-th dimension.

If a has C layout, the coordinates must be greater or equal than 0 and strictly less than the corresponding dimensions of a. If a has Fortran layout, the coordinates must be greater or equal than 1 and less or equal than the corresponding dimensions of a. Raise Invalid_argument if the array a does not have exactly N dimensions, or if the coordinates are outside the array bounds.

If N > 3, alternate syntax is provided: you can write a.{i1, i2, ..., iN} instead of Genarray.get a [|i1; ...; iN|]. (The syntax a.{...} with one, two or three coordinates is reserved for accessing one-, two- and three-dimensional arrays as described below.)



此外,它说(特别是关于一维数组):

val get : (’a, ’b, ’c) t -> int -> ’a

Array1.get a x, or alternatively a.{x}, returns the element of a at index x. x must be greater or equal than 0 and strictly less than Array1.dim a if a has C layout. If a has Fortran layout, x must be greater or equal than 1 and less or equal than Array1.dim a. Otherwise, Invalid_argument is raised.



在 F# 中,您可以使用 Array.get 访问数组元素方法也一样。但是,更接近的语法是 w.[a + b * c] .简而言之,在 F# 中,使用 []而不是 {} .

关于arrays - OCaml 中的 a.{X} 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770247/

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