类型声明中的OCaml语法错误

时间:2011-01-22 21:18:53

标签: ocaml

我是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 个答案:

答案 0 :(得分: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;;

您使用*来定义产品类型,如'a * 'b中所示。虽然现在可能不太重要,但您应该知道Node of 'a * 'bNode of ('a * 'b)不同。您可以将它们视为具有两个参数的变体类型,另一个是具有一个参数(元组)的变体类型。

还有其他一些事情,

  • 您需要定义SequenceRepeat列表。
  • 'nonterminal'terminal未使用;除非它们是幻影类型,我怀疑它们,它们可能应该用于部分签名。