我是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
所在的位置)存在语法错误,我无法弄清楚原因!
答案 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 * 'b
和Node of ('a * 'b)
不同。您可以将它们视为具有两个参数的变体类型,另一个是具有一个参数(元组)的变体类型。
还有其他一些事情,
Sequence
和Repeat
列表。 'nonterminal
和'terminal
未使用;除非它们是幻影类型,我怀疑它们,它们可能应该用于部分签名。