OCaml sexplib,如何定义自定义到_sexplib函数?
我正在使用sexp的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
语法自动生成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以防止出现这种情况。