2010-06-11 1 views
5

Есть ли способ сделать декларацию в стиле C в OCaml?OCAMl forward декларация

Моя проблема заключается в том, что у меня есть два варианта, которые взаимно относятся друг к другу:

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

Так как тип должен знать другую .. Я искал его на Google, но, к сожалению, OCaml не настолько широк -использование язык программирования ..

ответ

13

Использование

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

иметь рекурсивные типы.

+0

Спасибо, у меня обычно нет проблем с открытием языковых функций, но OCaml действительно отличается от того, что я изучил до сих пор, и мне удалось найти «phat» ссылки сотен страниц, из-за которых я теряю ориентация :) – Jack

+0

Обратите внимание, что вы можете катить кости и искать синтаксис/документы F #, чтобы узнать OCaml. Синтаксис ядра тот же, и так, например, http://stackoverflow.com/questions/1378575/f-forward-type-declarations - победа здесь. – Brian

+1

это хороший момент. Мне пришлось выбирать OCaml, потому что они меня заставляли. Я думал, что это старый, хотя и мощный язык, но если современные функциональные языки (Scala, F #) сохраняют один и тот же синтаксис, тогда это окажется хорошим выбором :) – Jack