2009-09-10 6 views
3

게으른리스트 처리를 제공하는 OCaml 라이브러리는 무엇입니까? 나는이 라인을 따라 뭔가를 찾고 있어요 :게으른리스트 처리를위한 OCaml 라이브러리는 무엇입니까?

type 'a lazy_list = (*'*) 
    | Nil 
    | Cons of 'a * 'a lazy_list lazy_t 

let from f = 
    let rec gen n = 
    lazy 
     (
     match f n with 
      | Some x -> 
       Cons (x, gen (n + 1)) 
      | None -> 
       Nil 
    ) 
    in 
    gen 0 

통합을 Stream 종류와 문법 설탕과 좋을 텐데 Camlp4 파서를 역 추적을 위해.

+0

'lazy_t' 대신'Lazy.t'를 사용해야합니다. – user102008

답변

6

Ocaml Batterieslazy list module입니다. to_stream 기능을 확인하십시오. backtracking에 관해서는, 이제 Stream.t을 가지고 있기 때문에 camlp4의 스트림 파서를 볼 수 있습니다.

+0

감사합니다. 게으른 목록 모듈은 매우 편리합니다. 스트림 파서에 대해서는 확실하지 않지만 다시 파기하지는 않습니다. 하지만 여기서부터 알아낼 것입니다. – t0yv0

+0

음, camlp4가 역 추적하지 않습니까? 아마 camlp5에 대해 생각하고 있었 을까요? 그것들 중 하나 (또는 ​​둘다)는 연속을 통해 백 트랙을합니다 ... – nlucaroni

+0

아, 그래, 그 camlp5 것 같습니다. 감사! http://pauillac.inria.fr/~ddr/camlp5/doc/htmlc/bparsers.html – t0yv0

2

또한 Cf_seq이라는 지연 목록 모듈이 내 OCaml Network Application Environment 핵심 기초에 있습니다. 사실, 나는 기능적 데이터 구조를 완전히 썼다. 2 절 BSD 라이센스하에 모두 사용할 수 있습니다. 즐겨.

업데이트 : 코드가 "Oni"으로 바뀌 었으며 이제 BitBucket에서 호스팅됩니다. 또한 GODI 패키지를 사용할 수 있습니다.