一个。{X}在OCaml中意味着什么?

时间:2011-07-21 00:57:46

标签: arrays syntax f# ocaml

我目前正在尝试将一些OCaml移植到F#。我与OCaml“陷入了困境”,我的F#有点生疏。

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

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

a,b,c是整数。

我已经通过OCaml网站,Stackoverflow,法国O'Reilly书籍的英文翻译等进行了大量搜索,但却找不到这样的内容。当然,大多数搜索工具都会出现标点字符问题,这无济于事!是的我发现引用.被用来引用记录成员,而{ }被用来定义记录,但两者都在一起?根据用法,我假设它是某种关联或稀疏数组?

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

1 个答案:

答案 0 :(得分:9)

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

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

在页496(在页面底部),它说的是通用数组及其get方法:

  

val get:('a,'b,'c)t - &gt; int数组 - &gt; “一

     

读取通用大数组的元素。 Genarray.get a [| i1; ...; iN |]返回   a的元素,其坐标在第一维中为i1,在第二维中为i2   尺寸, 。 。 。,iN在第N维。

     

如果a具有C布局,则坐标必须大于或等于0且严格小于   a的相应尺寸。如果a具有Fortran布局,则坐标必须为   大于或等于1且小于或等于a的相应尺寸。提高   如果数组a没有完全N维,或者如果是,则为Invalid_argument   坐标位于数组范围之外。

     

如果N&gt; 3,提供了替代语法:你可以写一个。{i1,i2,...,iN}代替   Genarray.get a [| i1; ...;在|]。 (语法a。{...}有一个,两个或三个   坐标保留用于访问一维,二维和三维数组   如下所述。)

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

  

val get:('a,'b,'c)t - &gt; int - &gt; “一

     

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

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