2013-01-16 1 views
4

나는 자동으로 s-exp 함수를 생성하기 위해 with sexp 구문을 사용하고 있습니다.OCaml sexplib, 사용자 정의 to_sexplib 함수를 정의하는 방법?

문제는 내가 sexplib과 함께 인쇄 해요 일부 재귀 포인터가 있고 스택 오버플로가 끝날 것입니다.

그래서 to_sexp 함수를 재정의하고 "(SomeRecursiveData)"을 반환해야합니다. 어떻게해야합니까?

참고 : 내 데이터 정의 양식에 있습니다

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

'this_is_problematic_recursive_data'는 다른 유형과 같은 정의에 정말로 필요합니까, 아니면 이전에 정의 할 수 있습니까? 그 아이디어는't' 형 모듈'Foo'와 같은 모듈에 정의 된'to_exp' 모듈로 정의하는 것입니다. 가능하지 않은 경우 재귀 모듈을 사용해야합니다. –

+0

@FabriceLeFessant OCaml에서 새로 나온 솔루션을 이해할 수 없지만 모듈이 도움이된다고 생각하지 않습니다. 내 문제는 내가 refs의 목록을 가지고 있고 refs 중 하나가 런타임의 어떤 시점에서 목록 자체를 가리킨다는 것이다. 이를 방지하기 위해 해당 데이터 유형 (refs 목록이있는 데이터 유형)을 to_sexp로 대체하려고합니다. – sinan

답변

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 
관련 문제