Синтаксическая ошибка OCaml в объявлении типа - PullRequest
4 голосов
/ 23 января 2011

Я новичок в OCaml и понятия не имею, почему это вызывает синтаксическую ошибку:

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

Все, что он говорит, это синтаксическая ошибка в строке 14 символов 0-1 (где | Sequence of list), и я не могу понять, почему!

1 Ответ

8 голосов
/ 23 января 2011
type ('nonterminal, 'terminal) pe_tree = 
  | Is_empty 
  | Leaf of t 
  | Node of (n * tree) 
  | Sequence of list 
  | Repeat of list 
  | Is_not of e;;

Вы используете * для определения типов продуктов, как в 'a * 'b. Хотя, вероятно, не так уж важно сейчас, вы должны знать, что Node of 'a * 'b и Node of ('a * 'b) различны. Вы можете рассматривать их как тип варианта с двумя параметрами, а другой тип варианта с одним параметром (кортежом) соответственно.

Есть еще несколько вещей,

  • вам нужно определить, что Sequence и Repeat являются списком.
  • 'nonterminal и 'terminal не используются; если они не предназначены для фантомных типов, в которых я сомневаюсь, их, вероятно, следует использовать в части подписи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...