2010-06-11 16 views
5

¿Hay alguna forma de hacer una declaración directa de estilo C en OCaml?OCaml forward declaration

Mi problema es que tengo dos variantes que mutuamente se refieren el uno al otro:

type path_formula = 
    [ `Next of state_formula 
    | `Until of (state_formula * state_formula) 
    | `UntilB of (state_formula * int * state_formula) 
    ] 

type state_formula = 
    [ `True | `False 
    | `Not of state_formula 
    | `And of (state_formula * state_formula) 
    | `Or of (state_formula * state_formula) 
    | `Imply of (state_formula * state_formula) 
    | `Label of string 
    | `Prob` of (boundf * path_formula) 
    | `Expc` of (boundi * formula) 
    ] 

Así pues, tanto de tipo hay que saber que el otro .. He buscado en Google, pero por desgracia no es un OCaml tan amplia -uso lenguaje de programación ..

Respuesta

13

uso

type T1 = ... 
and T2 = ... 

tener tipos recursivos.

+0

Gracias, generalmente no tengo problemas para descubrir las características del lenguaje, pero OCaml es muy diferente de lo que he estudiado hasta ahora y solo he podido encontrar referencias "phat" de cientos de páginas que me hacen perder orientación :) – Jack

+0

Tenga en cuenta que puede tirar los dados y buscar sintaxis/documentos F # para aprender OCaml. La sintaxis del núcleo es la misma, y ​​así, por ejemplo, http://stackoverflow.com/questions/1378575/f-forward-type-declarations es una victoria aquí. – Brian

+1

ese es un buen punto. Tuve que elegir OCaml porque me forzaron. Pensé que era un lenguaje antiguo aunque poderoso, pero si los lenguajes funcionales modernos (Scala, F #) mantuvieran la misma sintaxis, esta sería una buena opción :) – Jack