2016-03-29 13 views
0

Ich benutze ocaml, um einen einfachen Compiler für Bean zu erstellen. In bean besteht jede Typdefinition vonWie zu definieren, dass die einander enthalten

  1. dem Schlüsselwort 'typedef'
  2. Typangabe,

  3. eine Kennung.

Typangabe in einem von:

1.Die keywords 'bool' oder 'int' umgeben

2.a durch Kommata getrennte Liste von Felddefinitionen durch {

} und

3.an Kennung

ich zwei Arten wie folgt definieren wollen:

type field_def = (ident * typespec) 

type typespec = 
    | Bool 
    | Int 
    | Tident of ident 
    | Tfield_def of field_def list 

type typedef = (ident * typespec) 

Ich benutze Typ in der Definition von field_def aber definieren Sie es in der nächsten Definition, so wird immer der Typ ungebundener Fehler angezeigt. Wie kann ich es lösen?

Antwort

2

Wenn Sie Typen erstellen möchten, die voneinander abhängig sind, müssen Sie and verwenden:

type a = A | OfB of b 
and b = B | OfA of a 

Es ist das gleiche, wie wenn man sich gegenseitig rekursive Funktionen definieren wollen:

let rec is_even n = n = 0 || is_odd (n - 1) 
and is_odd n = n <> 0 && is_even (n - 1) 
Verwandte Themen