2011-01-22 10 views
5

Sono nuovo di OCaml e non ho indizio perché questo mi sta dando un errore di sintassi:errore di sintassi OCaml nella dichiarazione di tipo

type ('nonterminal, 'terminal) pe = 
| Empty 
| T of t 
| N of n 
| Seq of list 
| Choose of list 
| Star of e 
| Not of e;; 

type ('nonterminal, 'terminal) pe_tree = 
| Is_empty 
| Leaf of t 
| Node of (n,tree) 
| Sequence of list 
| Repeat of list 
| Is_not of e;; 

Tutto quello che sta dicendo è che c'è un errore di sintassi on line 14 caratteri 0 -1 (che è dove | Sequence of list è) e non riesco a capire perché!

risposta

8
type ('nonterminal, 'terminal) pe_tree = 
    | Is_empty 
    | Leaf of t 
    | Node of (n * tree) 
    | Sequence of list 
    | Repeat of list 
    | Is_not of e;; 

si utilizza * per definire i tipi di prodotti, come in 'a * 'b. Anche se probabilmente non è troppo importante ora, dovresti sapere che Node of 'a * 'b e Node of ('a * 'b) sono diversi. Puoi considerarli come un tipo di variante con due parametri, e l'altro un tipo di variante con un parametro (una tupla), rispettivamente.

ci sono alcune altre cose,

  • è necessario definire cosa Sequence e Repeat sono un elenco di.
  • 'nonterminal e 'terminal non sono utilizzati; a meno che non siano per tipi di fantasmi, che ne dubito, probabilmente dovrebbero essere usati in parte della firma.
+0

Grazie! Sono confuso però, perché ho già un altro tipo di dichiarazione (che ho appena aggiunto alla mia domanda originale) e sta compilando bene:/ – robocop

+0

ci devono essere più di quelle definizioni di tipo; 't',' e' non sono definiti, insieme alle altre cose che ho menzionato. Nessuna di queste definizioni dovrebbe essere compilata come le hai visualizzate. – nlucaroni

+0

Ohh ok, capisco. È ovvio, ora, non so perché stavo avendo così tanti problemi, grazie! – robocop

Problemi correlati