/ / Čo znamená. {X} v OCaml? - polia, syntax, f #, ocaml

Čo znamená a. {X} znamenať v OCaml? - polia, syntax, f #, ocaml

Momentálne sa snažím preniesť nejakú OCaml na F #. Som na hlbokom konci s OCamlom a moje F # je trochu hrdzavé.

V každom prípade je kód OCaml v OCaml v poriadkukompilátor, ale (nie prekvapivo) poskytuje množstvo chýb v kompilátore F #, aj keď je zapnutá kompatibilita s ML. Niektoré chyby sa zdajú byť rezervovanými slovami, ale väčšina chýb si sťažuje na .{ v riadkoch ako:

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

a, b, c sú celé čísla.

Urobil som veľa prehľadávania cez OCamlwebové stránky, Stackoverflow, anglický preklad francúzskej knihy „Reilly“ atď. a nič také nenájdu. Samozrejme to nepomôže, že väčšina vyhľadávacích zariadení má problémy s interpunkčnými znakmi! Áno, našiel som odkazy na . - ktoré sa používajú na označenie členov záznamu a - { } používajú sa na definovanie záznamov, ale obidve spolu? Z použitia predpokladám, že je to nejaký druh asociatívneho alebo riedkeho poľa?

Čo to znamená táto syntax? Aký je najbližší ekvivalent F #?

odpovede:

9 pre odpoveď č. 1

K dispozícii je pdf dokumentácia / príručka oCaml tu:

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

Na strane 496 (smerom k dolnej časti stránky) sa hovorí o generických poliach a spôsobe ich získania:

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

Prečítajte si prvok generického veľkého poľa. Genarray.získajte [| i1; ...; iN |] sa vracia prvok, ktorého súradnice sú i1 v prvej dimenzii, i2 v druhej rozmer,. , ., iN v N-tej dimenzii.

Ak má rozloženie C, súradnice musia byťväčšie alebo rovné 0 a prísne menšie ako zodpovedajúce rozmery a. Ak má rozloženie Fortran, súradnice musia byť väčšie alebo rovnaké ako 1 a menšie alebo rovnaké ako zodpovedajúce rozmery a. vychovávať Invalid_argument, ak pole a nemá presne N rozmerov alebo ak súradnice sú mimo hraníc poľa.

Ak N> 3, poskytuje sa alternatívna syntax: môžete namiesto. napísať. {i1, i2, ..., iN} Genarray.get [| i1; ...; In |]. (Syntax a. {...} s jedným, dvoma alebo tromi súradnice sú vyhradené na prístup k jednorozmerným, dvojrozmerným a trojrozmerným poliam ako popísané nižšie.)

Ďalej hovorí (konkrétne o jednorozmerných poliach):

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

Array1.get x alebo alternatívne a. {X} vráti element at at index x. x must byť väčšie alebo rovné 0 a prísnemenej ako Array1.dim, ak má rozloženie C. Ak má rozloženie Fortran, x musí byť väčšie alebo rovnaké ako 1 a menšie alebo rovnaké ako Array1.dim a. V opačnom prípade je aktivovaný Invalid_argument.

V poli F # môžete pristupovať k prvkom poľa pomocou Array.get metóda tiež. Ale užšia syntax by bola w.[a + b * c], Stručne povedané, v F # použite [] namiesto {}.