2011-01-22 72 views
5

我是新來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是),我不明白爲什麼!

回答

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未使用;除非它們是幻像類型,我對此表示懷疑,它們可能應該用於簽名的一部分。
+0

謝謝!我很困惑,因爲我之前有另一個類型聲明(我剛剛添加到我的原始問題),它的編譯很好:/ – robocop 2011-01-23 00:40:43