2013-04-22 15 views
6

Widziałem niektóre kodu źródłowego posiadającegoCo znaczy "[< >]" w OCaml?

let rec parse_document = parser 
    | [< len = parse_int32; st; >] -> 
     parse_list [] (ES.take_int32 len st) 
    | [< >] -> malformed "parse_document" 

Czy mogę wiedzieć, co jest [< >] środku? zbyt trudno jest wyszukiwać w Google tego rodzaju znakach.

Odpowiedz

7

To jest cukier syntaktyczny dla typu danych Stream. Jego manipulowanie jest opisane szczegółowo w this chapter książki Developping Applications with OCaml.

Cukier syntaktyczny nie jest wbudowany w kompilatorze, musi być wstępnie przetworzony przez preprocesor Camlp4. Aby to zrobić, musisz dodać -pp camlp4o do linii poleceń kompilacji.

+0

co to jest '>>' wewnątrz 'let encode_to_string = encode_to_buffer >> Buffer.contents' –

+0

Jest to zdefiniowany przez użytkownika operator infiksów:' let (>>) f g = ... '. Musisz sprawdzić definicję, ale z nazwy wygląda jak skład z funkcją odwrotną: 'let (>>) f g = fun x -> g (f x)'. – gasche

1

To jest dosłowna składnia dla streams. Strumień jest podobny do listy, z tą różnicą, że tylko jeden element jest dostępny na raz, a ty usuwasz pierwszy element, czytając go.

Najprawdopodobniej jest używany do kodu parsera. Analizatory składni - zadeklarowane za pomocą słowa kluczowego parser jak w twoim przykładzie - to funkcje, które mogą "konsumować" elementy strumienia.

2

To jest strumień. Służy głównie do tworzenia parserów. Ale strumienie zostały usunięte z OCaml i są teraz dostarczane jako rozszerzenie camlp4.