有哪些OCaml库可以处理惰性列表?

3
有哪些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解析器提供语法糖。


应该使用 Lazy.t 而不是 lazy_t - user102008
2个回答

6

Ocaml Batteries拥有一个延迟列表模块,请查看to_stream函数。至于回溯,您可以查看camlp4的流解析器,现在您已经有了一个Stream.t。


谢谢,懒惰列表模块非常方便。不过流解析器可能不太好用,因为它们不能回溯。但我会从这里开始解决问题的。 - t0yv0
好的,camlp4 不会回溯吗?也许我想的是 camlp5?它们中的一个(或两个)通过延续回溯... - nlucaroni
啊,是的,那似乎是camlp5。谢谢! http://pauillac.inria.fr/~ddr/camlp5/doc/htmlc/bparsers.html - t0yv0
Batteries库现在有三种不同的惰性序列类型,具有不同的属性。 - Mars

2
此外,在我的OCaml网络应用环境Core Foundation中还有一个称为Cf_seq的惰性列表模块。实际上,我编写了一堆函数数据结构。这些代码都在2条款BSD许可下提供。享受吧。
更新:该代码已更名为“Oni”,现在托管在BitBucket上。您也可以使用GODI软件包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接