2011-01-22 12 views
5

Soy nuevo a OCaml y no tengo ni idea de por qué esto me está dando un error de sintaxis:error de sintaxis OCaml de declaración de 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;; 

Todo lo que está diciendo es que hay un error de sintaxis en la línea de 14 caracteres 0 -1 (que es donde | Sequence of list es) y no puedo entender por qué!

Respuesta

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;; 

Se utilizan * para definir tipos de productos, como en 'a * 'b. Aunque probablemente no sea demasiado importante ahora, debe saber que Node of 'a * 'b y Node of ('a * 'b) son diferentes. Puede considerarlos como un tipo de variante con dos parámetros, y el otro como un tipo de variante con un parámetro (una tupla), respectivamente.

Hay algunas otras cosas,

  • es necesario definir lo que Sequence y Repeat son una lista de.
  • 'nonterminal y 'terminal no se utilizan; a menos que sean para tipos fantasma, lo cual lo dudo, probablemente deberían usarse en parte de la firma.
+0

¡Gracias! Sin embargo, estoy confundido, porque tengo otra declaración de tipo antes (que acabo de agregar a mi pregunta original) y está compilando muy bien:/ – robocop

+0

tiene que haber más que solo esas definiciones de tipo; 't',' e' no están definidos, junto con las otras cosas que he mencionado. Ninguna de esas definiciones debe compilarse como las has mostrado. – nlucaroni

+0

Ohh ok, ya veo. Es obvio ahora jaja, no sé por qué estaba teniendo tantos problemas, ¡gracias! – robocop

Cuestiones relacionadas