2010-06-11 16 views
5

Esiste un modo per eseguire una dichiarazione di inoltro in stile C in OCaml?Dichiarazione anticipata OCaml

Il mio problema è che ho due varianti che si riferiscono reciprocamente gli uni agli altri:

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) 
    ] 

Quindi entrambi i tipi bisogna conoscere l'altra .. ho cercato su Google, ma purtroppo OCaml non è una così ampia linguaggio di programmazione -use ..

risposta

13

Usa

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

di avere tipi ricorsivi.

+0

Grazie, di solito non ho problemi a scoprire le caratteristiche del linguaggio ma OCaml è molto diverso da quello che ho studiato fino ad ora e sono stato in grado di trovare riferimenti "phat" di centinaia di pagine che mi fanno perdere orientamento :) – Jack

+0

Nota che puoi lanciare i dadi e cercare sintassi/documenti F # per imparare OCaml. La sintassi del core è la stessa, quindi ad es. http://stackoverflow.com/questions/1378575/f-forward-type-declarations è una vittoria qui. – Brian

+1

questo è un buon punto. Ho dovuto scegliere OCaml perché mi hanno costretto. Ho pensato che fosse un linguaggio vecchio ma potente, ma se i linguaggi funzionali moderni (Scala, F #) mantenessero la stessa sintassi, questa sarebbe una buona scelta :) – Jack

Problemi correlati