有哪些 OCaml 库用于惰性列表处理?

Posted

技术标签:

【中文标题】有哪些 OCaml 库用于惰性列表处理?【英文标题】:What OCaml libraries are there for lazy list handling? 【发布时间】:2009-09-10 06:21:16 【问题描述】:

有哪些提供惰性列表处理的 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 【参考方案1】:

Ocaml Batteries 有一个lazy list module,查看to_stream 函数。至于回溯,既然你有一个 Stream.t ,你就可以查看camlp4的流解析器。

【讨论】:

谢谢,懒人列表模块很方便。不确定流解析器,因为它们不会回溯。但我会从这里弄清楚。 嗯,camlp4 不回溯?也许我在考虑camlp5?其中之一(或两者)通过延续回溯...... 啊,是的,这似乎是 camlp5。谢谢! pauillac.inria.fr/~ddr/camlp5/doc/htmlc/bparsers.html 电池库现在有three different more or less lazy sequence types,具有不同的属性。【参考方案2】:

另外,在我的OCaml Network Application Environment Core Foundation 中有一个名为Cf_seq 的惰性列表模块。事实上,我写了一整套函数式数据结构。这一切都在 2 条款 BSD 许可下可用。享受吧。

更新:代码已重命名为“Oni”,现在托管在 BitBucket 上。您也可以使用GODI 包。

【讨论】:

以上是关于有哪些 OCaml 库用于惰性列表处理?的主要内容,如果未能解决你的问题,请参考以下文章

Ocaml - 字符串到 (int*int*int) 列表

如何在ocaml中将字符串转换为整数列表?

OCaml 中的 D 类不可变数据切片

截断OCaml中的列表

OCaml:使用 fold_left 从列表创建元组列表

访问 ocaml 中的全局参考列表 [关闭]