【问题标题】:OCaml sexplib, how to define custom to_sexplib function?OCaml sexplib,如何定义自定义 to_sexplib 函数?
【发布时间】:2013-01-16 09:51:59
【问题描述】:

我正在使用with sexp 语法自动生成 s-exp 函数。

问题是我使用 sexplib 打印的数据结构有一些递归指针,打印最终会导致堆栈溢出。

所以我需要重写一个 to_sexp 函数,让它只返回"(SomeRecursiveData)",我该怎么做呢?

注意:我的数据定义格式为:

type somedata ...
and someotherdata ...
and this_is_problematic_recursive_data
and ....
with sexp

【问题讨论】:

  • 你真的需要this_is_problematic_recursive_data 和其他类型的定义一样,还是可以在之前定义?想法是在模块Foo 中定义它,类型为tto_exp 在同一模块中定义。如果不可能,您可能应该使用递归模块。
  • @FabriceLeFessant 我不明白你的解决方案(我是 OCaml 的新手),但我认为模块没有帮助。我的问题是我有一个参考列表,其中一个参考在运行时的某个点指向列表本身。我想覆盖该数据类型(带有引用列表的那个) to_sexp 以防止这种情况发生。

标签: ocaml s-expression


【解决方案1】:

我不能说我完全理解你的问题,但是如果函数 to_sexp 不是交叉递归的(即let rec to_sexp = ... 而不是let rec to_sexp = ..... and foo = .... calls to_sexp somewhere.....)你可以试试这个技巧:

module A = struct type t with sexp end

module B = struct 
  include A
  let to_sexp = .... your code ...
end

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多