2009-09-10 33 views
3

什麼OCaml庫在那裏提供惰性列表處理?與Stream類型和語法糖什麼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 

集成回溯 Camlp4解析器將是不錯:我找東西沿着這些路線。

+0

'Lazy.t'應該用來代替'lazy_t' – user102008 2011-07-14 10:36:10

回答

6

Ocaml Batteries有一個lazy list module,檢查出to_stream函數。至於回溯,您可以查看camlp4的流解析器,現在您已擁有Stream.t。

+0

謝謝,lazy list模塊非常方便。不確定流解析器,但他們不回溯。但我會從這裏弄清楚。 – t0yv0 2009-09-10 19:41:20

+0

好吧,camlp4不會回溯?也許我在考慮camlp5?其中一個(或兩者)通過延續回溯... – nlucaroni 2009-09-10 19:53:48

+0

啊是的,這似乎是camlp5。謝謝! http://pauillac.inria.fr/~ddr/camlp5/doc/htmlc/bparsers.html – t0yv0 2009-09-11 06:43:07

2

此外,在我的OCaml Network Application Environment核心基金會中有一個懶惰列表模塊Cf_seq。實際上,我寫了一整套函數式數據結構。它全部在2分條款的BSD許可下提供。請享用。

更新:代碼已被重命名爲「Oni」,它現在託管在BitBucket。您也可以使用GODI軟件包。