OCaml sexplib,如何定义自定义到_sexplib函数?

OCaml sexplib,如何定义自定义到_sexplib函数?,ocaml,s-expression,Ocaml,S Expression,我正在使用sexp的语法自动生成s-exp函数 问题是我用sexplib打印的数据结构有一些递归指针,打印结果会导致堆栈溢出 所以我需要重写一个to_sexp函数,让它只返回(SomeRecursiveData),我该怎么做呢 注:我的数据定义格式如下: type somedata ... and someotherdata ... and this_is_problematic_recursive_data and .... with sexp 我不能说我完全理解您的问题,但如果函数to_s

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

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

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

注:我的数据定义格式如下:

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

我不能说我完全理解您的问题,但如果函数to_sexp不是交叉递归的(即
让rec to_sexp=…
而不是
让rec to_sexp=…..和foo=…..调用某处的_sexp…
),您可以尝试以下技巧:

module A = struct type t with sexp end

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

您是否真的需要将
此\u是有问题的\u递归\u数据
与其他类型定义在同一定义中,或者可以在以前定义它?想法是在模块
Foo
中定义它,类型为
t
,并且在同一模块中定义
to_exp
。如果不可能,您可能应该使用递归模块。@FabricelFessant我不理解您的解决方案(我是OCaml的新手),但我认为模块没有帮助。我的问题是我有一个引用列表,其中一个引用在运行时的某个点指向列表本身。我想将该数据类型(具有引用列表的数据类型)重写为_sexp以防止出现这种情况。