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

发布于 2024-11-25 18:26:01 字数 486 浏览 1 评论 0原文

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

无论如何,OCaml 代码在 OCaml 编译器中构建得很好,但(毫不奇怪)即使打开了 ML 兼容性,F# 编译器中也会出现大量错误。有些错误看起来是保留字,但大部分错误都抱怨行中的 .{ ,例如:

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

a、b、c 是整数。

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

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

I'm currently trying to port some OCaml to F#. I'm "in at the deep end" with OCaml and my F# is a bit rusty.

Anyway, the OCaml code builds fine in the OCaml compiler, but (not surprisingly) gives a load of errors in the F# compiler even with ML compatibility switched on. Some of the errors look to be reserved words, but the bulk of the errors are complaining about the .{ in lines such as:

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

a,b,c are integers.

I've done a lot of searching through OCaml websites, Stackoverflow, the English translation of the French O'Reilly book, etc. and cannot find anything like this. Of course it doesn't help that most search facilities have problems with punctuation characters! Yes I've found references to . being used to refer to record members, and { } being used to define records, but both together? From the usage, I assume it is some kind of associative or sparse array?

What does this syntax mean? What is the closest F# equivalent?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只为守护你 2024-12-02 18:26:01

这里有 oCaml 文档/手册的 pdf 版本:

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

第 496 页(靠近底部)页),它谈到了通用数组及其 get 方法:

val get : ('a, 'b, 'c) t -> int 数组 -> '一个

读取通用大数组的元素。 Genarray.得到一个[|i1; ...; iN|] 返回
a 的元素,其第一维坐标为 i1,第二维坐标为 i2
方面, 。 。 ., 第 N 维中的 iN。

如果a具有C布局,则坐标必须大于或等于0且严格小于
a 的相应尺寸。如果 a 有 Fortran 布局,则坐标必须是
大于或等于 1 且小于或等于 a 的相应维度。增加
Invalid_argument 如果数组 a 没有恰好 N 维,或者如果
坐标超出数组范围。

如果 N > 3、提供了替代语法:您可以编写 a.{i1, i2, ..., iN} 而不是
Genarray.得到一个[|i1; ...; iN|]。 (语法 a.{...} 带有一个、两个或三个
坐标保留用于访问一维、二维和三维数组,如下所示
如下所述。)

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

val get : ('a, 'b, 'c) t ->整数-> '一个

Array1.get ax,或者 a.{x},返回 a 在索引 x 处的元素。 x 必须
如果 a 具有 C 布局,则大于或等于 0 且严格小于 Array1.dim a。如果一个
具有 Fortran 布局,x 必须大于或等于 1 且小于或等于
Array1.dim a。否则,将引发 Invalid_argument。

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

There is a pdf of the oCaml documentation/manual available here:

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

On page 496 (toward the bottom of the page), it says of generic arrays and their get method:

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.)

Further, it says (specifically about one dimensional arrays):

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.

In F#, you can access array elements using the Array.get method as well. But, a closer syntax would be w.[a + b * c]. In short, in F#, use [] instead of {}.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文