2013-04-22 3 views
6

나는OCaml에서`[< >]이 무슨 뜻입니까?

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

내가 내 [< >] 무엇을 알 수 있습니다 가진 일부 소스 코드를 보았는가? 이런 종류의 징후에 대해서는 너무 어렵습니다.

답변

7

이것은 Stream 데이터 형식의 구문 설탕입니다. 그 조작은 Developping Applications with OCamlthis chapter에 자세히 설명되어 있습니다.

구문 설탕은 컴파일러에 내장되어 있지 않으므로 Camlp4 전처리기에 의해 사전 처리되어야합니다. 이렇게하려면 컴파일 명령 행에 -pp camlp4o을 추가해야합니다.

+0

무엇이'''안에'let encode_to_string = encode_to_buffer >> Buffer.contents' –

+0

그것은 사용자 정의 중온 연산자입니다. let (>>) f g = ...'. 정의를 확인해야하지만, 역 합성 함수처럼 보이는 이름에서 :'let (>>) f g = fun x -> g (f x)'. – gasche

1

이는 streams의 리터럴 구문입니다. 스트림은 한 번에 하나의 요소 만 사용할 수 있다는 것을 제외하고는 목록과 같습니다. 첫 번째 요소를 읽음으로써 해당 요소를 제거합니다.

주로 파서 코드에 사용 된 것 같습니다. 예를 들어 parser 키워드로 선언 된 파서는 스트림 요소를 "소비"할 수있는 함수입니다.

2

이것은 스트림입니다. 주로 파서를 만드는 데 사용됩니다. 그러나 스트림은 OCaml에서 제거되었으며 이제 camlp4 확장으로 제공됩니다.